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


функция обратного вызова DRIVER_UNLOAD (wdm.h)

Подпрограмма Unload выполняет все операции, необходимые перед тем, как система выгрузит драйвер.

Синтаксис

DRIVER_UNLOAD DriverUnload;

void DriverUnload(
  [in] _DRIVER_OBJECT *DriverObject
)
{...}

Параметры

[in] DriverObject

Указатель на структуру DRIVER_OBJECT , предоставленный вызывающим. Это объект драйвера драйвера.

Возвращаемое значение

None

Remarks

Подпрограмма unload драйвера выполняется в контексте системного потока в IRQL = PASSIVE_LEVEL.

Подпрограмма выгрузки требуется для драйверов WDM и необязательна для драйверов, отличных от WDM. Подпрограмма выгрузки драйвера, если она указана, должна называться XxxUnload, где Xxx — это префикс, зависящий от драйвера. Подпрограмма DriverEntry драйвера должна хранить адрес подпрограммы выгрузки в файле DriverObject-DriverUnload>. (Если подпрограмма не указана, этот указатель должен иметь значение NULL.)

Подробные сведения о реализации подпрограммы выгрузки драйвера см. в статье Создание подпрограммы выгрузки.

Примеры

Чтобы определить подпрограмму обратного вызова Unload , необходимо сначала предоставить объявление функции, определяющее тип определяемой процедуры обратного вызова. Windows предоставляет набор типов функций обратного вызова для драйверов. Объявление функции с помощью типов функций обратного вызова помогает анализу кода для драйверов, средству проверки статических драйверов (SDV) и другим средствам проверки находить ошибки, и это требование для написания драйверов для операционной системы Windows.

Например, чтобы определить подпрограмму обратного вызова Unload с именем MyUnload, используйте тип DRIVER_UNLOAD, как показано в следующем примере кода:

DRIVER_UNLOAD MyUnload;

Затем реализуйте процедуру обратного вызова следующим образом:

_Use_decl_annotations_
VOID 
  MyUnload(
    struct _DRIVER_OBJECT  *DriverObject
    )
  {
      // Function body
  }

Тип функции DRIVER_UNLOAD определен в файле заголовка Wdm.h. Чтобы более точно определить ошибки при запуске средств анализа кода, не забудьте добавить заметку _Use_decl_annotations_ в определение функции. Заметка _Use_decl_annotations_ гарантирует, что будут использоваться заметки, которые применяются к типу функции DRIVER_UNLOAD в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в статье Объявление функций с помощью типов ролей функций для драйверов WDM. Сведения о _Use_decl_annotations_см. в статье Поведение функции с заметками.

Требования

Требование Значение
Целевая платформа Персональный компьютер
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)
IRQL Вызывается на PASSIVE_LEVEL.