共用方式為


建立 WDF HID Minidrivers

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

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

要提供的內容

  1. 您會在 UMDF) 的 MsHidUmdf.sys (下撰寫較低的篩選驅動程式,或針對 KMDF) 撰寫 MsHidKmdf.sys( ,這兩者都包含在作業系統中。

  2. 下載並檢閱 vhidmini2 範例

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

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

  5. 提供可分支至 IOCTL 特定方法處理常式的 EvtIoDeviceControl 回呼函式。 檢閱 WDF HID Minidriver IOCTLs 中所述的 IOCTLs ,並確定您的驅動程式會處理裝置的相關 IOCTL。

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

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

    • UmdfKernelModeClientPolicyAllowKernelModeClients ,以便可在堆疊中載入核心模式傳遞驅動程式。
    • UmdfMethodNeitherAction複製 以允許 UMDF 處理METHOD_NEITHER類型的 IOCTLs。
    • UmdfFileObjectPolicyAllowNullAndUnknownFileObjects
    • UmdfFsCoNtextUsePolicyCanUseFsCoNtext2

    例如:

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

如果您要撰寫適用于 Windows 7 的 UMDF HID 迷你驅動程式,請下載 Windows 驅動程式套件 (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 位置的圖表。