USB 複合デバイスの列挙

新しい USB デバイスがホスト コンピューターに接続されると、USB バス ドライバーは、このデバイスに対する物理デバイス オブジェクト (PDO) を作成し、この新しい PDO を報告するための PnP イベントを生成します。 するとオペレーティング システムはバス ドライバーに対し、PDO に関連付けられているハードウェア ID を照会します。

USB バス ドライバーは、すべての USB デバイスについて次の形式でデバイス ID を 報告します。

USB\VID_xxxx&PID_yyyy

xxxxyyyy の値は、デバイス記述子の idVendor フィールドと idProduct フィールドから直接取得されます。

デバイスが次の要件を満たしている場合、バス ドライバーは USB\COMPOSITE という互換識別子 (ID) も報告します。

  • デバイス記述子のデバイス クラス (bDeviceClass) フィールド値 0 が含まれているか、デバイス記述子のクラス (bDeviceClass)、サブクラス (bDeviceSubClass)、およびプロトコル (bDeviceProtocol) フィールドの値が、それぞれ 0xEF、0x02、0x01 である必要があります。USB インターフェイス関連付け記述子に関する記事を参照してください。

  • デバイスには複数のインターフェイスが必要です。

  • デバイスには 1 つの構成が必要です。

バス ドライバーは、デバイス記述子のデバイス クラス (bDeviceClass)、サブクラス (bDeviceSubClass)、およびプロトコル (bDeviceProtocol) フィールドもチェックします。 これらのフィールドがゼロの場合、デバイスは複合デバイスであり、バス ドライバーは PDO に対応する USB\COMPOSITE という互換識別子 (ID) を併せて報告します。

バス ドライバーは、新しい PDO のハードウェアと互換性のある ID を取得した後、オペレーティング システムは INF ファイルを検索します。 INF ファイルの 1 つにデバイス ID の一致が含まれている場合、Windows はそのドライバーを読み込み、汎用の親ドライバーは動作しません。 そのデバイス ID が含まれた INF ファイルがなく、PDO に互換 ID がある場合、Windows は互換 ID を検索します。 この検索では、Usb.inf で一致が生成され、オペレーティング システムが USB 汎用親ドライバー (Usbccgp.sys)を読み込みます。

デバイスに USB\COMPOSITE の互換性 ID を生成する特性がない場合は、汎用親ドライバーを読み込む INF ファイルを指定する必要があります。 INF ファイルには、Usb.inf を参照する needs/includes セクションが含まれている必要があります。

複合デバイスに複数の構成がある場合は、提供する INF ファイルで、汎用親ドライバーがレジストリでどの構成を使用するかを指定する必要があります。 必要なレジストリ キーについては、既定以外の USB 構成を選択するための Usbccgp.sys の構成に関する記事を参照してください。