Поделиться через


Указание функции выгрузки

Драйвер выноски должен предоставлять функцию выгрузки. Операционная система вызывает эту функцию, когда драйвер выноски выгружается из системы. Функция выгрузки драйвера выноски должна гарантировать отмену регистрации выносок драйвера выноски в подсистеме фильтрации до выгрузки драйвера выноски из системной памяти. Драйвер выноски не может быть выгружен из системы, если он не предоставляет функцию выгрузки.

Способ определения функции выгрузки в драйвере выноски зависит от того, основан ли драйвер выноски на основе модели драйвера 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;
}

Сведения о реализации функции выгрузки драйвера выноски см. в разделе Выгрузка драйвера выноски.