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 Driver Framework (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