既定以外の USB 構成を選択するための Usbccgp.sys の構成

この記事では、Usbccgp.sys が USB 構成を選択する方法を構成するレジストリ設定について説明します。 また、複合デバイスのいずれかのファンクションを制御するクライアント ドライバーから送信された構成選択要求を Usbccgp.sys が処理する方法についても説明します。

USB 複合デバイスは、1 つの USB デバイス内の複数の機能 (機能デバイス) で構成されています。 Windows が複合デバイス用にマイクロソフト提供 の USB 汎用親ドライバー (Usbccgp.sys) を読み込んだ場合、その時点から、Usbccgp.sys はデバイスの構成を選択する役割を担います。 複合デバイスの各インターフェイスまたはインターフェイス コレクションは、多くの点で、独自の物理デバイス オブジェクト (PDO) を持つ別個のデバイスに似ています。 デバイスの構成をリセットすると、クライアント ドライバーが制御するインターフェイスだけでなく、すべてのデバイスのインターフェイスの構成が変更されます。 オペレーティング システムではこれが許可されません。 したがって、一連のインターフェイスまたは複合デバイスのインターフェイス コレクションを制御するクライアント ドライバーは、Usbccgp.sys によって最初に設定された構成を変更できません。

ただし、Windows Vista 以降のバージョンの Windows では、次のレジストリ値を追加して、選択する構成を指定できます。

レジストリ キー Type Default Value
OriginalConfigurationValue REG_DWORD USB 構成インデックス。 Usbccgp.sys は、構成選択要求にまず OriginalConfigurationValue を使用します。 0
AltConfigurationValue REG_DWORD OriginalConfigurationValue を使用した構成選択要求に失敗した場合に使用する構成インデックス。 0

Note

既定では、上記のレジストリ設定は存在しません。 USB デバイスのハードウェア (つまり "デバイス") キーの下に追加する必要があります。

レジストリ設定を使用すると、CCGP ドライバーで代替構成を選択できます。

前の表で説明したレジストリ値は、デバイスの構成記述子で報告される bConfigurationNumではなく、構成記述子 (USB_CONFIGURATION_DESCRIPTOR) の bConfigurationValue メンバーによって示される USB 定義の構成インデックスに対応します。 まず、Usbccgp.sys は、OriginalConfigurationValue によって指定された USB 構成インデックスを使用して、親 USB バス ドライバー (Usbhub.sys) に選択構成要求を送信します。 その要求に失敗した場合、Usbccgp.sys は AlternateConfigurationValue で指定された値の使用を試みます。 AlternateConfigurationValue または OriginalConfigurationValue が無効な場合、Usbccgp.sys は既定値を使用します。

構成選択要求は、さまざまな理由で失敗する可能性があります。 最も一般的なエラーは、デバイスが要求に適切に応答しない場合、または bMaxPower 値 (要求された構成に必要な電力) がハブ ポートでサポートされている電力値を超えた場合に発生します。 たとえば、特定の構成 (OriginalConfigurationValue によって指定) の bMaxPower は 100 ミリアンペアですが、ハブ ポートが 50 ミリアンペアしか供給できない場合です。 Usbccgp.sys がその構成の構成選択要求を送信すると、USB ドライバー スタック (具体的には、USB ポート ドライバー) は要求に失敗します。 その後、Usbccgp.sys は、AltConfigurationValue によって示される構成を指定して、別の構成選択要求を送信します。 代替構成に必要なのが 50 ミリアンペア以下であり、他の問題が発生していない場合、構成選択要求は正常に完了します。

互換性機能

複合デバイスの機能数のクライアント ドライバーが複合デバイスの構成を選択できない場合でも、クライアント ドライバーは構成選択要求を Usbccgp.sys に送信できます。 この要求を作成する方法については、「USB デバイスの構成を選択する方法」をご覧ください。 Usbccgp.sys は、クライアント ドライバーから構成選択要求を受信した後、以下のタスクを実行します。

  1. USB ポート ドライバーが構成選択要求を検証するために使用したのと同じ条件を使用して、受け取った要求を検証します。
  2. 現在の設定とは異なるインターフェイスまたはパイプの設定が要求により指定された場合、Usbccgp.sys は、URB_FUNCTION_SELECT_INTERFACE 型の URB を送信して、既存の設定を新しいインターフェイスおよびパイプ設定に変更することにより、インターフェイス選択要求を発行します。
  3. USBD_INTERFACE_INFORMATION および USBD_PIPE_INFORMATION 構造のキャッシュされた内容を URB にコピーします。
  4. URB を完了します。