事前解析データを取得する
この記事では、ユーザー モード アプリケーションとカーネル モード ドライバーが HID コレクションの準備データを取得する方法について説明します。これは、コレクションの HID レポートを記述する不透明な構造です。
ユーザー モード アプリケーション
ユーザー モード アプリケーションは、事前解析されたデータを必要とする任意の HIDClass サポート ルーチンを呼び出す前に、コレクションの事前解析されたデータを取得する必要があります。 アプリケーションは、デバイス上に開いているファイルがある限り、コレクションの事前解析済みデータへのアクセスを保持する必要があります。
HID コレクションでファイルを開くと、アプリケーションは HidD_GetPreparsedData を呼び出して、ルーチン割り当てバッファー内にあるコレクションの事前解析されたデータを返します。
コレクションへのアクセスが不要になったら、アプリケーションは HidD_FreePreparsedData を呼び出す必要があります。
カーネル モード ドライバー
カーネル モード ドライバーが HID コレクションを開くと、ドライバーは、次の方法でコレクションの事前解析されたデータを取得します。
コレクションの事前解析されたデータの長さを取得する
コレクションの事前解析されたデータを取得する
事前解析されたデータの長さを確認するために、ドライバーは IOCTL_HID_GET_COLLECTION_INFORMATION 要求を使用します。 この要求は、HID_COLLECTION_INFORMATION 構造体を返します。 この構造体の DescriptorSize メンバーは、コレクションの事前解析されたデータのサイズをバイト単位で指定します。 ドライバーは、事前解析されたデータを保持するために、少なくともこのサイズの非ページ プールからバッファーを割り当てる必要があります。
事前解析されたデータのバッファーを割り当てると、ドライバーは IOCTL_HID_GET_COLLECTION_DESCRIPTOR 要求を使用して事前解析されたデータを取得します。
事前解析されたデータを取得すると、ドライバーは **HidP_**Xxx HID サポート ルーチンでそのデータを使用して、HID コレクションの機能に関する情報を取得し、HID レポートからコントロール データを抽出できるようになります。