EVT_WDF_REQUEST_IMPERSONATE回调函数 (wdfrequest.h)

[仅适用于 UMDF]

驱动程序的 EvtRequestImpersonate 事件回调函数在请求的模拟级别执行任务,例如打开受保护的文件。

语法

EVT_WDF_REQUEST_IMPERSONATE EvtWdfRequestImpersonate;

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

参数

[in] Request

框架请求对象的句柄,表示需要模拟的 I/O 请求。

[in, optional] Context

指向以前在 WdfRequestImpersonate 方法中提供的上下文的指针。 此参数是可选的,如果不需要上下文,则可以为 NULL。

返回值

没有

言论

User-Mode 驱动程序框架(UMDF)不允许驱动程序的 EvtRequestImpersonate 回调函数调用任何框架的对象方法。 这可确保驱动程序不会向其他驱动程序回调函数或其他驱动程序公开模拟级别。

EVT_WDF_REQUEST_IMPERSONATE 函数类型在 Wdfrequest.h 头文件中定义。 若要在运行代码分析工具时更准确地识别错误,请务必将 _Use_decl_annotations_ 注释添加到函数定义。 _Use_decl_annotations_ 批注可确保使用应用于头文件中 EVT_WDF_REQUEST_IMPERSONATE 函数类型的批注。

以下限制也适用:

  • 当驱动程序使用 ImpersonationLevel = SecurityIdentification调用 WdfRequestImpersonate 时,回调无法调用 LoadLibrary 或执行任何需要访问检查的作。

  • 相同的原则适用于 DLL 延迟加载。 假设驱动程序在标识级别模拟,回调调用 GetUserNameW。 由于此 API 反过来会延迟加载另一个 DLL 并调用 GetUserNameExW,因此初始调用可能会失败并 ERROR_PROC_NOT_FOUNDERROR_BAD_IMPERSONATION_LEVEL。 在这种情况下,回调应直接调用 GetUserNameExW

有关详细信息,请参阅 处理 UMDF 驱动程序中的客户端模拟

例子

若要定义 EvtRequestImpersonate 回调函数,必须先提供一个函数声明来标识要定义的回调函数的类型。 Windows 为驱动程序提供一组回调函数类型。 使用回调函数类型声明函数有助于 驱动程序代码分析静态驱动程序验证程序(SDV)和其他验证工具查找错误,这是为 Windows作系统编写驱动程序的要求。

例如,若要定义名为 MyRequestImpersonate EvtRequestImpersonate 回调函数,请使用 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