HID クライアント ドライバー
システム提供の HID ミニドライバーがデバイスのポートまたはバスをサポートしていない場合は、ベンダーが提供するミニドライバーが必要です。
次の図は、汎用 HIDClass デバイスのドライバー スタックを示したものです。ベンダー提供のコンポーネント (オプションおよび必須のもの) を使用する場合があります。
Windows では、次のようにドライバー スタックがビルドされます。
- トランスポート スタックは、接続されている各 HID デバイスの物理デバイス オブジェクト (PDO) を作成し、適切な HID トランスポート ドライバーを読み込みます。それに続けて、HID クラス ドライバーを読み込みます。
- HID クラス ドライバーは、TLC の PDO を作成します。 複数の TLC を持つ複雑なデバイスの場合、HID クラス ドライバーは TLC ごとに PDO を作成し、TLC に関連付けられているハードウェア ID に各デバイス オブジェクトを表す識別子が含まれていることを確認します。
- ベンダーが提供する関数またはフィルター ドライバーは、HID コレクションの FDO またはフィルター DO を作成します。
- また、ベンダーが提供するアプリケーションは、SetupDI* API を使用してデバイスを開いてデバイスを識別し、HID でサポートされているルーチンを使用してそのデバイスと通信することもできます。 このようなデバイスは「RAW モードで開かれる」と表現されます。
システム提供のミニドライバー操作がデバイスをサポートしていない場合は、ベンダーが提供する HID ミニドライバーが必要です。 このミニドライバーは、次の 2 つの方法で実装できます。
- HID クライアント ドライバー
- アプリケーションによる HID への直接アクセス
ベンダーがドライバー (ミニドライバー以外) を提供する場合、そのドライバーは次のようになります。
- Windows ドライバーの最小要件に準拠している必要があります。 理想的には、ユーザー モード ドライバー フレームワーク (UMDF) またはカーネル モード ドライバー フレームワーク (KMDF) に基づいている必要があります。 「Windows ドライバー モデル」で説明されているように、WDM 関数ドライバーを作成する方法は理想的なソリューションとはいえません。
- 通常は、ベンダー定義のデバイス インターフェイスをサポートしています。「デバイス インターフェイス クラス」を参照してください。 上位レベルのドライバーまたはユーザー モード アプリケーションは、カスタム インターフェイスを使用して、ベンダー ドライバーが動作するデバイスにアクセスします。 カスタム インターフェイスにより、機能が追加されたり、HID クラス ドライバーへのインターフェイスが簡略化されたりする場合があります。
ドライバーがファンクション ドライバーまたはフィルター ドライバーでない場合は、プラグ アンド プレイ通知を使用して HID コレクションを検索できます。 コレクションを見つけると、ドライバーはそのコレクションを開き、ファンクション ドライバーまたはフィルター ドライバーと同じ方法で操作します。
重要な注意:
- ベンダーが提供したファンクション ドライバーが HID コレクションの FDO またはフィルター DO を作成する場合は、FILE_OBJECTの FsContext フィールドを使用してファイル オブジェクト固有のデータを格納しないでください。 FsContext フィールドは、HID クラス ドライバー用に予約されています。 スタック内の別のドライバーがファイル オブジェクト固有のコンテキスト データを格納する必要がある場合は、代わりに FsContext2 フィールドを使用する必要があります。
- PDO に複数のデバイスが接続されている場合、FsContext2 フィールドを使用できるデバイスを特定するための組み込みのメカニズムはありません。