建立 WDF HID Minidrivers
本主題描述如何使用 Windows Driver Frameworks (WDF) 建立 Human Interface Device (HID) minidriver。
您可以使用 KMDF 或 UMDF 來撰寫 HID 迷你驅動程式。 建議您從 vhidmini2 minidriver 範例開始。 您可以使用 KMDF 或 UMDF 2.x 來編譯此範例驅動程式。
要提供的內容
您會在 UMDF) 的 MsHidUmdf.sys (下撰寫較低的篩選驅動程式,或針對 KMDF) 撰寫 MsHidKmdf.sys( ,這兩者都包含在作業系統中。
下載並檢閱 vhidmini2 範例。
從驅動程式的EvtDriverDeviceAdd回呼函式呼叫WdfFdoInitSetFilter。
建立 I/O 佇列,以接收 MsHidUmdf.sys 或 MsHidKmdf.sys 從類別驅動程式傳遞至驅動程式的 I/O 要求。
提供可分支至 IOCTL 特定方法處理常式的 EvtIoDeviceControl 回呼函式。 檢閱 WDF HID Minidriver IOCTLs 中所述的 IOCTLs ,並確定您的驅動程式會處理裝置的相關 IOCTL。
針對 UMDF,如果您的驅動程式是由 ACPI 列舉,可以選擇性地啟用選擇性暫停。 在裝置的硬體金鑰中,新增 EnableDefaultIdleNotificationHandler 子機碼,並將其設定為 1。
針對 UMDF,請在 INF 檔案的 WDF 特定DDInstall區段中設定下列INF 指示詞:
- UmdfKernelModeClientPolicy 至 AllowKernelModeClients ,以便可在堆疊中載入核心模式傳遞驅動程式。
- UmdfMethodNeitherAction 至 複製 以允許 UMDF 處理METHOD_NEITHER類型的 IOCTLs。
- UmdfFileObjectPolicy 至 AllowNullAndUnknownFileObjects
- UmdfFsCoNtextUsePolicy 至 CanUseFsCoNtext2
例如:
[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.sys 和 MsHidKmdf.sys,這是位於類別驅動程式與迷你驅動程式之間的 WDM 驅動程式。
MsHidUmdf.sys和MsHidKmdf.sys呼叫 HID 類別驅動程式的HidRegisterMinidriver常式,以註冊為實際的 HID 迷你驅動程式。 雖然這些驅動程式會作為裝置的函式驅動程式,但它們只會將類別驅動程式的 I/O 要求傳遞至驅動程式 (,因此有時稱為 傳遞驅動程式) 。 對於 KMDF 和 UMDF,您提供的唯一元件是 HID 迷你驅動程式,這是位於傳遞驅動程式底下的較低篩選驅動程式。
UMDF 架構:KMDF架構