WDF HID ミニドライバーの作成
このトピックでは、Windows Driver Frameworks (WDF) を使用してヒューマン インターフェイス デバイス (HID) ミニドライバーを作成する方法について説明します。
KMDF または UMDF を使用して HID ミニドライバーを作成できます。 vhidmini2 ミニドライバーのサンプルから始めることをお勧めします。 このサンプル ドライバーは、KMDF または UMDF 2.x を使用してコンパイルできます。
提供する内容
MsHidUmdf.sys (UMDF の場合) または MsHidKmdf.sys (KMDF の場合) の下に下位フィルター ドライバーを記述します。これらはどちらもオペレーティング システムの一部として含まれます。
vhidmini2 sample をダウンロードして確認します。
ドライバーの EvtDriverDeviceAdd コールバック関数から WdfFdoInitSetFilter を呼び出します。
MsHidUmdf.sys または MsHidKmdf.sysがクラス ドライバーからドライバーに渡す I/O 要求を受け取るための I/O キューを作成します。
IOCTL 固有の メソッド ハンドラーに分岐する EvtIoDeviceControl コールバック関数を提供します。 WDF HID ミニドライバー IOCTL で 説明されている IOCTL を確認し、ドライバーがデバイスに関連するものを処理することを確認します。
UMDF の場合、ドライバーが ACPI によって列挙されている場合は、必要に応じてセレクティブ サスペンドを有効にします。 デバイスのハードウェア キーで、EnableDefaultIdleNotificationHandler サブキーを追加し、1 に設定します。
UMDF の場合は、INF ファイルの WDF 固有の DDInstall セクションで次の INF ディレクティブを設定します。
- カーネルモード パススルー ドライバーをスタックに読み込むことができるようにするため UmdfKernelModeClientPolicy を AllowKernelModeClients に
- UMDF が METHOD_NEITHER 型の IOCTL を処理できるように、UmdfMethodNeitherAction を Copy に
- 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 をドライバー パッケージに含めます。
Architecture
HID クラス ドライバー (HidClass.sys) とフレームワークは、ミニドライバーの一部の I/O 要求 (プラグ アンド プレイや電源管理要求など) を処理するための競合する WDM ディスパッチ ルーチンを提供します。 その結果、HID ミニドライバーは、クラス ドライバーとフレームワークの両方にはリンクできません。 そのため、Microsoft は、クラス ドライバーとミニドライバーの間に存在する WDM ドライバーである MsHidUmdf.sys と MsHidKmdf.sys を提供します。
MsHidUmdf.sys と MsHidKmdf.sys は両方、HID クラス ドライバーの HidRegisterMinidriver ルーチンを呼び出して、実際の HID ミニドライバーとして登録します。 これらのドライバーはデバイスのファンクション ドライバーとして機能しますが、クラス ドライバーからドライバーに I/O 要求を渡すだけです (そのためパススルー ドライバーと呼ばれることもあります)。 KMDF と UMDF の両方で、指定する唯一のコンポーネントは HID ミニドライバーです。これは、パススルー ドライバーの下にある下位フィルター ドライバーです。
UMDF アーキテクチャ: KMDF アーキテクチャ