アーカイブ: HID デバイスのハードウェア ID

最終更新日: 2002年3月12日
トピック
はじめにはじめに
USB 上の HIDUSB 上の HID
HID のリファレンスHID のリファレンス

はじめに

ヒューマン インターフェイス デバイス (HID) クラスは元々、USB Device Working Group によって開発されました。このプロトコル標準には、キーボード、マウスとポインティング デバイス、ジョイスティック、ゲーム パッド、および他の種類の入力デバイスのサポートが含まれています。HID は USB 上で使用するために元々開発されましたが、このプロトコルは理論上、特定のバスには依存しておらず、他のバスに移植できます。

Microsoft は、Microsoft Windows 98 Gold、Windows 98 Second Edition、Windows Millennium Edition、Windows 2000、Windows XP オペレーティング システム、および Microsoft Windows Server 2003 オペレーティング システムで、USB 上の HID をサポートし、将来のバージョンの Windows でも引き続きサポートします。Windows での HID アーキテクチャの詳細については、Windows Driver Development Kit (DDK) の「Interactive Input Devices」セクションを参照してください。

この記事では、ヒューマン インターフェイス デバイス (HID) のハードウェア列挙プロセスに関する情報を提供します。また、Windows ファミリのオペレーティング システムで使用する INF ファイルでデバイスを識別するため、メーカーが使用する必要があるハードウェア識別子 (ID) を特定します。

ページのトップへページのトップへ

USB 上の HID

ここでは、ユニバーサル シリアル バス上のヒューマン インターフェイス デバイス列挙プロセスについて説明します。

USB デバイスのデバイス識別文字列

USB HID デバイスが Windows ベースのコンピュータに初めてプラグインされると、Windows USB スタックは、デバイスおよびデバイスのインターフェイス記述子から詳細を取得して、デバイスを列挙し、デバイスに対しハードウェア ID と互換性 ID のセットを生成します。

USB のハードウェア ID の完全な一覧については、Windows XP DDK の Device Installation の下の「Device Identification Strings」セクションを参照してください。

下記の各セクションの例は、2 つのシナリオを示します。

単一インターフェイス USB デバイスの USB ID

複数インターフェイス (複合) USB デバイスの USB ID

例 1: 単一インターフェイス USB デバイスの USB ID

この例は、Windows 2000 または Windows XP を実行しているシステムで、単一インターフェイス USB デバイスに対して、ハードウェア ID と互換性 ID がどのように生成されるかを示します。

デバイスが USB スタックによって元々列挙されている場合、Usbhub ドライバはデバイス記述子から、idVendor、idProduct、および bcdDevice を抽出します。これら 3 つのフィールドは、USB ハードウェア ID を生成するため組み込まれています。ベンダ、デバイス、およびリビジョン番号が、16 進数形式で常に格納される点に注意してください。

デバイスの互換性 ID の生成は、より複雑です。クラス コード、サブクラス コード、およびプロトコル コードは、インターフェイス記述子の bInterfaceClass、bInterfaceSubClass、および bInterfaceProtocol によって決定されます。これらの値は、2 桁の 16 進数形式です。

メーカーは、INF 内で一致するハードウェア ID のみを使用する必要があります。表 1 で太字で記されていない項目を、メーカーは INF 内で使用 "しない" でください。

表 1: 単一インターフェイス デバイスのデバイス識別文字列

ハードウェア ID互換 ID

USB\Vid_xxxx&Pid_yyyy&Rev_zzzz
USB\Vid_xxxx&Pid_yyyy

USB\Class_aa&SubClass_bb&Prot_cc USB\Class_
aa&SubClass_bb USB\Class_
aa

例 2: 多機能 (複合) USB デバイスの USB ID

複数の機能を持つデバイスは、複合デバイスと呼ばれます。この例は、Windows 2000、Windows XP、および Windows Server 2003 上の複合 USB デバイスに対して、ハードウェア ID と互換性 ID がどのように生成されるかを示します。新しい USB 複合デバイスが、Windows を実行しているコンピュータ システムにプラグインされると、USB ハブ ドライバは、物理デバイス オブジェクト (PDO) を作成し、子デバイスのセットが変化したことをオペレーティング システムに通知します。新しい PDO に関連付けられているハードウェア ID をハブ ドライバに照会した後、システムは、適切な INF ファイルを検索して、識別子に一致するものを探します。メーカーが、デバイス全体に対して 1 つのドライバのみを読み込み (つまり、複合デバイス ドライバを使用しない)、そのドライバを含むソフトウェアですべてのインターフェイスを多重化することにした場合、メーカーは、ハードウェア ID が一致するものを指定して、オペレーティング システムがより低いランクの一致 (USB\COMPOSITE) を選択しないようにする必要があります。

メーカーは、ドライバを読み込むか、フレンドリ デバイス名を単に提供するかにかかわらず、一致するハードウェア ID のみを INF 内で使用する必要があります。メーカーは、互換性 ID を INF 内で使用しないでください。

表 2: 複合デバイスの親 PDO のデバイス識別文字列

ハードウェア ID互換 ID

USB\Vid_xxxx&Pid_yyyy&Rev_zzzz
USB\Vid_xxxx&Pid_yyyy

USB\Class_aa&SubClass_bb&Prot_cc
USB\Class_aa&SubClass_bb
USB\Class_aa
USB\COMPOSITE

ただし、ハードウェアの一致が見つからない場合、Windows プラグ アンド プレイは、互換性 ID である USB\COMPOSITE を利用して、USB Generic Parent ドライバを読み込みます。次に、Generic Parent ドライバは、複合デバイスの各インターフェイスのハードウェア ID の個々のセットを使用して、PDO の個々のセット (インターフェイスごとに 1 つ) を作成します。次のセクションでは、子 PDO のハードウェア ID の形式を示します。

各インターフェイスの PDO に対してハードウェア ID のセットを構築するため、Windows XP (および Windows Server 2003) 内の USBCCGP ドライバと、Windows 2000 内の USBhub ドライバは、インターフェイス番号 (ゼロ ベースの16 進値) をハードウェア ID の末尾に追加します。

クラス コード、サブクラス コード、およびプロトコル コードは、インターフェイス記述子の、bInterfaceClass、bInterfaceSubClass、および bInterfaceProtocol の各フィールドによって決定されます。これらの値は、2 桁の 16 進数形式です。

メーカーは、ドライバを読み込むか、フレンドリ デバイス名を単に提供するかにかかわらず、一致するハードウェア ID のみを INF 内で使用する必要があります。表 3 で太字で記されていない項目を、メーカーは INF 内で使用しないでください。

表 3: 複合デバイスの子 PDO のデバイス識別文字列

ハードウェア ID互換 ID

USB\Vid_xxxx&Pid_yyyy&Rev_zzzz&MI_ww
USB\Vid_xxxx&Pid_yyyy&MI_ww

USB\Class_aa&SubClass_bb&Prot_cc
USB\Class_aa&SubClass_bb
USB\Class_aa

HID デバイスのデバイス識別文字列

USB デバイスに HID インターフェイスがあることを USB スタックが識別したら、HID ソフトウェア スタックは、そのインターフェイス上で読み込まれます。その後、HID スタックは、列挙プロセスの次のフェーズを行います。HID クラス ドライバは、トップレベルのコレクションをすべて列挙し、各コレクションの PDO を作成します。

Microsoft の定義では、トップレベルのコレクションとは、別のコレクション内で入れ子になっていない HID コレクションのことです。USB HID Specification で定義されているように、トップレベルのコレクションは、Application コレクションである必要は特にありません。

下記の各セクションの例は、2 つのシナリオを示します。

HID インターフェイス上の単一のトップレベル コレクション

HID インターフェイス上の複数のトップレベル コレクション

例 3: HID インターフェイス上の単一のトップレベル コレクション

HIDClass は、単一のトップレベルの HID デバイスまたはインターフェイスに対し、表 4 で示すハードウェア ID を作成します。デバイスが複合 USB デバイスの場合、インターフェイス番号もデバイス識別文字列に含まれる点に注意してください。

表 4: 単一 TLC HID のハードウェア識別文字列

単一の USB デバイス複合 USB デバイス

HID\Vid_xxxx&Pid_yyyy&Rev_zzzz
HID\Vid_xxxx&Pid_yyyy
HID_DEVICE_UP:pppp_U:uuuu
HID_DEVICE

HID\ Vid_xxxx&Pid_yyyy&Rev_zzzz&MI_aa
HID\Vid_xxxx&Pid_yyyy&MI_aa
HID_DEVICE_UP:pppp_U:uuuu
HID_DEVICE

メーカーは、ドライバを読み込むか、フレンドリ デバイス名を単に提供するかにかかわらず、INF での照合中、表 4 の最初の 2 つのハードウェア ID のみを使用する必要があります。表 4 で太字で記されていない項目を、メーカーは INF 内で使用しないでください。

例 4: HID インターフェイス上の複数のトップレベル コレクション

HIDClass は、HID インターフェイス上のトップレベルの各コレクションに対し、下記の表で示すハードウェア ID を作成します。デバイスが複合 USB デバイスの場合、インターフェイス番号もデバイス識別文字列に含まれる点に注意してください。

表 5: 複数 TLC HID のハードウェア識別文字列

単一の USB デバイス複合 USB デバイス

HID\Vid_xxxx&Pid_yyyy&Rev_zzzz&Colbb
HID\Vid_xxxx&Pid_yyyy&Colbb
HID_DEVICE_UP:pppp_U:uuuu
HID_DEVICE

HID\Vid_xxxx&Pid_yyyy&Rev_zzzz&MI_aa&Colbb
HID\Vid_xxxx&Pid_yyyy&MI_aa&Colbb
HID_DEVICE_UP:pppp_U:uuuu
HID_DEVICE

メーカーは、ドライバを読み込むか、フレンドリ デバイス名を単に提供するかにかかわらず、INF 内で、表 5 の最初の 2 つのハードウェア ID のみを使用する必要があります。表 5 で太字で記されていない項目を、メーカーは INF 内で使用しないでください。

(OS で用いるために予約された) 特別なトップレベルのコレクション

特定の HID トップレベル コレクションは、特別な HID デバイス文字列を生成します。Windows 2000、Windows XP、および Windows Server 2003 では、表 6 に示すトップレベルのコレクションは特別なケースであり、それぞれ追加のハードウェア ID があります。表 6 は、これらのコレクションを特定します。最後の列は、ハードウェア ID 一覧に追加される、追加の文字列を示します。

表 6: 特別なケースのトップレベル コレクション

デバイスの種類Usage PageUsage ID追加のハードウェア ID

ポインタ

0x01

0x01

HID_DEVICE_SYSTEM_MOUSE

マウス

0x01

0x02

HID_DEVICE_SYSTEM_MOUSE

ジョイスティック

0x01

0x04

HID_DEVICE_SYSTEM_GAME

ゲーム パッド

0x01

0x05

HID_DEVICE_SYSTEM_GAME

キーボード

0x01

0x06

HID_DEVICE_SYSTEM_KEYBOARD

キーパッド

0x01

0x07

HID_DEVICE_SYSTEM_KEYBOARD

システム コントロール

0x01

0x80

HID_DEVICE_SYSTEM_CONTROL

コンシューマ オーディオ コントロール

0x0C

0x01

HID_DEVICE_SYSTEM_CONSUMER

他のすべてのコレクションが共有モードまたは raw モードで開かれるのに対し、"HID_DEVICE_SYSTEM_MOUSE" と "HID_DEVICE_SYSTEM_KEYBOARD" は、上で示したオペレーティング システムによって、排他的モードで開かれる点に注意してください。これは、キーボードとマウス (ペン) による入力が、セキュリティで保護された入力として扱われるようにするためです。

重要: これらの ID は、既定のオペレーティング システム機能をこれらのクラスのデバイスに提供するため、Windows によって明示的に使用されます。HID メーカーは、これらを使用しないでください。これらのハードウェア ID に対して読み込まれるドライバの一覧については、Windows Driver Development Kit を参照してください。

ページのトップへページのトップへ

HID のリファレンス

USB Human Interface Devices, Revision 1.11:
http://www.usb.org/developers/devclass_docs/HID1_11.pdf このリンクをクリックすると Microsoft.com サイトを離れます

入力デバイス、および入力デバイスと Windows XP との相互作用について:

Web 上の MSDN で入手可能な Windows XP Driver Development Kit (DDK) の「Input Devices」:
http://www.microsoft.com/japan/whdc/devtools/ddk/default.mspx

Windows での入力デバイス、HID デバイス、およびスマート カード デバイスのサポートに関するリソースとホワイト ペーパー:
入力/HID のテクノロジ

Windows ドライバのセットアップに関するホワイト ペーパー:
セットアップ/ドライバのインストール
ソフトウェア アプリケーションと共に Windows ドライバをインストールする方法


ページのトップへページのトップへ