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
目標平台 Universal
最低UMDF版本 2.0
標頭 wdfrequest.h (包含 Wdf.h)

另請參閱

WdfRequestImpersonate