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