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

[Относится только к UMDF]

Функция обратного вызова события EvtRequestImpersonate драйвера выполняет задачи на запрошенном уровне олицетворения, такие как открытие защищенного файла.

Синтаксис

EVT_WDF_REQUEST_IMPERSONATE EvtWdfRequestImpersonate;

void EvtWdfRequestImpersonate(
  [in]           WDFREQUEST Request,
  [in, optional] PVOID Context
)
{...}

Параметры

[in] Request

Дескриптор объекта запроса платформы, который представляет запрос ввода-вывода, требующий олицетворения.

[in, optional] Context

Указатель на контекст, который ранее был предоставлен в методе WdfRequestImpersonate . Этот параметр является необязательным и может иметь значение NULL, если контекст не требуется.

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

None

Remarks

User-Mode Driver Framework (UMDF) не позволяет функции обратного вызова EvtRequestImpersonate драйвера вызывать любые объектные методы платформы. Это гарантирует, что драйвер не предоставляет уровень олицетворения другим функциям обратного вызова драйвера или другим драйверам.

Тип функции EVT_WDF_REQUEST_IMPERSONATE определен в файле заголовка Wdfrequest.h. Чтобы более точно определить ошибки при запуске средств анализа кода, не забудьте добавить заметку _Use_decl_annotations_ в определение функции. Заметка _Use_decl_annotations_ гарантирует, что будут использоваться заметки, которые применяются к типу функции EVT_WDF_REQUEST_IMPERSONATE в файле заголовка.

Также применяются следующие ограничения:

  • Когда драйвер вызывает WdfRequestImpersonate с ImpersonationLevel = SecurityIdentification, обратный вызов не может вызвать LoadLibrary или выполнить какие-либо действия, требующие доступа проверка.

  • Тот же принцип применяется к загрузке библиотеки DLL с задержкой. Рассмотрим пример, в котором драйвер олицетворяет себя на уровне идентификации, а обратный вызов вызывает GetUserNameW. Так как этот API, в свою очередь, задерживает загрузку другой библиотеки DLL и вызывает GetUserNameExW, начальный вызов может завершиться сбоем с ERROR_PROC_NOT_FOUND или ERROR_BAD_IMPERSONATION_LEVEL. В таком случае обратный вызов должен вызывать getUserNameExW напрямую.

Дополнительные сведения см. в разделе Обработка олицетворения клиента в драйверах UMDF.

Примеры

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

Например, чтобы определить функцию обратного вызова EvtRequestImpersonate с именем MyRequestImpersonate, используйте тип EVT_WDF_REQUEST_IMPERSONATE , как показано в следующем примере кода:

EVT_WDF_REQUEST_IMPERSONATE  MyRequestImpersonate;

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

_Use_decl_annotations_
VOID
 MyRequestImpersonate (
    WDFREQUEST  Request
    PVOID  Context
    )
  {...}

Дополнительные сведения о требованиях к объявлениям функций см. в статье Объявление функций с помощью типов ролей функций для драйверов KMDF.

Сведения о Use_decl_annotations см. в статье Поведение функции с заметками.

Требования

Требование Значение
Минимальная версия клиента Windows 8.1
Целевая платформа Универсальное
Минимальная версия UMDF 2,0
Верхняя часть wdfrequest.h (включая Wdf.h)

См. также раздел

WdfRequestImpersonate