Указание функции выгрузки
Драйвер выноски должен предоставлять функцию выгрузки. Операционная система вызывает эту функцию, когда драйвер выноски выгружается из системы. Функция выгрузки драйвера выноски должна гарантировать отмену регистрации выносок драйвера выноски в подсистеме фильтрации до выгрузки драйвера выноски из системной памяти. Драйвер выноски не может быть выгружен из системы, если он не предоставляет функцию выгрузки.
Способ определения функции выгрузки в драйвере выноски зависит от того, основан ли драйвер выноски на основе модели драйвера Windows (WDM) или Платформы драйверов Windows (WDF).
Драйверы выносок WDM-Based
Если драйвер выноски основан на WDM, он указывает функцию Unload в своей функции DriverEntry . Пример:
VOID
Unload(
IN PDRIVER_OBJECT DriverObject
);
NTSTATUS
DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
)
{
...
// Specify the callout driver's Unload function
DriverObject->DriverUnload = Unload;
...
}
Драйверы выносок WDF-Based
Если драйвер выноски основан на WDF, он указывает функцию EvtDriverUnload в своей функции DriverEntry . Пример:
VOID
Unload(
IN WDFDRIVER Driver
);
NTSTATUS
DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
)
{
NTSTATUS status;
WDF_DRIVER_CONFIG config;
WDFDRIVER driver;
...
// Initialize the driver config structure
WDF_DRIVER_CONFIG_INIT(&config, NULL);
// Indicate that this is a non-PNP driver
config.DriverInitFlags = WdfDriverInitNonPnpDriver;
// Specify the callout driver's Unload function
config.EvtDriverUnload = Unload;
// Create a WDFDRIVER object
status =
WdfDriverCreate(
DriverObject,
RegistryPath,
NULL,
&config,
&driver
);
...
return status;
}
Сведения о реализации функции выгрузки драйвера выноски см. в разделе Выгрузка драйвера выноски.