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 と互換 ID を取得した後、オペレーティング システムは INF ファイルを検索します。 いずれかの INF ファイルにデバイス ID と一致するエントリが含まれている場合、その INF ファイルに示されているドライバーが 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 の構成に関する記事を参照してください。

USB 汎用親ドライバー (Usbccgp.sys)
Microsoft が提供する USB ドライバー