共用方式為


支援 Kernel-Mode 用戶端於 UMDF 驅動程式中

本主題描述從 UMDF 第 2 版開始,User-Mode Driver Framework (UMDF) 驅動程式如何支援 核心模式用戶端

內核模式用戶端 是一種內核模式驅動程式,可將 I/O 要求傳送至 UMDF 驅動程式。 內核模式驅動程式可能位於 UMDF 驅動程式上方、位於相同的裝置堆疊中,或可能位於不同的裝置堆疊中。

核心模式驅動程式可以轉送它從使用者模式應用程式收到的 I/O 要求,或建立新的 I/O 要求,並將其傳送至使用者模式驅動程式。

如何在 UMDF 驅動程式中支援內核模式用戶端

若要啟用 UMDF 驅動程式對內核模式客戶端的支援,UMDF 驅動程式的 INF 檔案必須在其 INF DDInstall中包含 UmdfKernelModeClientPolicy 指示詞。WDF 區段。

架構提供兩種方法,對支援內核模式客戶端的驅動程式很有用。 驅動程式可以呼叫 WdfRequestGetRequestorMode 方法來判斷 I/O 要求是否來自核心模式或使用者模式。 如果 I/O 要求來自使用者模式,驅動程式可以呼叫 WdfRequestIsFromUserModeDriver,以判斷要求是否來自應用程式或其他使用者模式驅動程式。

內核模式驅動程式的限制

只有在內核模式驅動程式符合下列需求時,UMDF 驅動程式才能處理來自內核模式驅動程式的 I/O 要求:

  • 當核心模式驅動程式傳送 I/O 要求時,必須在 IRQL = PASSIVE_LEVEL 執行。

  • 除非驅動程式已將 UmdfFileObjectPolicy INF 指示詞設定為 AllowNullAndUnknownFileObjects,否則內核模式驅動程式傳送至使用者模式驅動程式的每個 I/O 要求都必須有相關聯的檔案物件。 架構先前必須收到 I/O 管理員已建立檔案物件的通知。 (這類通知會導致架構呼叫使用者模式驅動程式的 EvtDeviceFileCreate 回呼函式,但該回呼函式是選擇性的。

  • I/O 要求不能包含 IRP_MJ_INTERNAL_DEVICE_CONTROL 函式程式代碼。

  • I/O 要求的緩衝區不能包含其他資訊的指標,因為使用者模式驅動程式無法取值指標。

  • 如果 I/O 要求包含 I/O 控制碼,且 指定「既不」緩衝區存取方法,那麼內核模式驅動程式需要在建立 I/O 要求的應用程式的進程上下文中傳送 I/O 要求。 如需如何在 UMDF 驅動程式中支援「兩者」方法的詳細資訊,請參閱 在 UMDF 驅動程式中管理緩衝區存取方法

  • UMDF 驅動程式可能會在使用者模式中修改 I/O 要求的輸出數據。 因此,內核模式驅動程式必須驗證它從使用者模式驅動程式接收的任何輸出數據。

  • 通常,核心模式用戶端應該驗證 UMDF 驅動程式傳遞給 WdfRequestCompleteWithInformationInformation 值。 如果用戶端是 KMDF 驅動程式,它可以呼叫 WdfRequestGetCompletionParams,以在IO_STATUS_BLOCK結構中取得此資訊。

    一般而言,架構不會驗證 UMDF 驅動程式傳遞給 WdfRequestCompleteWithInformation的資訊值。 (此參數通常指定傳輸的位元元元數目。架構只會針對輸出緩衝區驗證資訊值,而且只會針對 緩衝 I/O 數據存取方法驗證資訊值。 (例如,如果存取方法已緩衝處理 I/O,架構會驗證傳輸的位元元數目不會超過讀取作業的輸出緩衝區大小。