共用方式為


建立 WDF HID 微型驅動程式

本主題描述如何使用 Windows Driver Frameworks (WDF) 建立 Human Interface Device (HID) minidriver。

您可以使用 KMDF 或 UMDF 撰寫 HID 迷你驅動程式。 我們建議從 vhidmini2 minidriver 範例開始。 您可以使用 KMDF 或 UMDF 2.x 來編譯此範例驅動程式。

提供什麼

  1. 您會在 MsHidUmdf.sys (適用於 UMDF) 或 MsHidKmdf.sys 下撰寫下層篩選驅動程式,這兩者都包含在作業系統中。

  2. 下載並檢閱 vhidmini2 範例

  3. 從驅動程式的 EvtDriverDeviceAdd 回呼函式呼叫 WdfFdoInitSetFilter

  4. 建立 I/O 佇列,以接收 I/O 要求,這些要求由 MsHidUmdf.sysMsHidKmdf.sys 從類別驅動程式傳遞到您的驅動程式。

  5. 提供 EvtIoDeviceControl 回呼函式,以分支至 IOCTL 特定方法處理程式。 請檢查 WDF HID Minidriver IOCTLs 所描述的 IOCTLs,並確保您的驅動程式能夠處理與您的裝置相關的 IOCTLs。

  6. 針對UMDF,如果ACPI列舉您的驅動程式,可以選擇性地啟用選擇性暫停。 在裝置的硬體密鑰中,新增 EnableDefaultIdleNotificationHandler 子機碼,並將其設定為 1。

  7. 針對 UMDF,請在 INF 檔案的 WDF 特定 DDInstall 區段中,設定下列 INF 指示詞:

    • UmdfKernelModeClientPolicy變更為AllowKernelModeClients,讓內核模式傳遞驅動程式可以載入到堆疊中。
    • UmdfMethodNeitherAction複製,以允許 UMDF 處理 METHOD_NEITHER 類型的 IOCTL。
    • UmdfFileObjectPolicy 設定為 AllowNullAndUnknownFileObjects
    • UmdfFsContextUsePolicyCanUseFsContext2

    例如:

    [hidumdf.NT.Wdf]
    UmdfKernelModeClientPolicy = AllowKernelModeClients
    UmdfMethodNeitherAction=Copy
    UmdfFileObjectPolicy=AllowNullAndUnknownFileObjects
    UmdfFsContextUsePolicy = CanUseFsContext2
    

如果您要撰寫適用於 Windows 7 的 UMDF HID 迷你驅動程式,請下載 Windows Driver Kit (WDK) 8.1,以取得 HidUmdf.sys的原始程式碼。 然後,撰寫 UMDF 1.11 驅動程式,並在驅動程式套件中包含 HidUmdf.sys 和 UMDF 1.11。

建築

HID 類別驅動程式 (HidClass.sys) 和架構會提供衝突的 WDM 分派例程來處理迷你驅動程式的某些 I/O 要求(例如隨插即用和電源管理要求)。 因此,HID 迷你驅動程式無法連結至類別驅動程式和架構。 因此,Microsoft提供 MsHidUmdf.sysMsHidKmdf.sys,這是位於類別驅動程式和小驅動程式之間的WDM驅動程式。

MsHidUmdf.sysMsHidKmdf.sys 呼叫 HID 類別驅動程式的 HidRegisterMinidriver 例程,以註冊為實際的 HID 迷你驅動程式。 雖然這些驅動程式會作為裝置的函式驅動程式,但它們只會將類別驅動程式的 I/O 要求傳遞至您的驅動程式(因此有時稱為 傳遞驅動程式)。 針對 KMDF 和 UMDF,您提供的唯一元件是 HID 迷你驅動程式,這是位於傳遞驅動程式底下的較低篩選驅動程式。

UMDF 架構:KMDF 架構

顯示驅動程式堆疊中 hidumdf.sys 位置的圖表。

顯示驅動程式堆疊中 mshidkmdf.sys 位置的圖表。