Konfigurieren Usbccgp.sys zur Auswahl einer nicht standardmäßigen USB-Konfiguration

Dieser Artikel enthält Informationen zu Registrierungseinstellungen, mit denen Usbccgp.sys die Auswahl einer USB-Konfiguration konfigurieren. Das Thema beschreibt auch, wie Usbccgp.sys Select-Configuration-Anforderungen verarbeitet, die von einem Clienttreiber gesendet werden, der eine der Funktionen eines zusammengesetzten Geräts steuert.

Ein zusammengesetztes USB-Gerät besteht aus mehreren Funktionen (funktionale Geräte) innerhalb eines einzelnen USB-Geräts. Wenn Windows den von Microsoft bereitgestellten generischen übergeordneten USB-Treiber (Usbccgp.sys) für ein zusammengesetztes Gerät lädt, ist Usbccgp.sys ab diesem Zeitpunkt für die Auswahl der Konfiguration des Geräts verantwortlich. Jede Schnittstelle oder Schnittstellensammlung eines zusammengesetzten Geräts ähnelt in vielerlei Hinsicht einem separaten Gerät, das über ein eigenes physisches Geräteobjekt (PDO) verfügt. Beim Zurücksetzen der Konfiguration des Geräts wird die Konfiguration für alle Schnittstellen des Geräts geändert, nicht nur für die, die der Clienttreiber steuert. Das Betriebssystem lässt dies nicht zu. Daher kann ein Clienttreiber, der eine Reihe von Schnittstellen oder eine Schnittstellensammlung des zusammengesetzten Geräts steuert, die Konfiguration nicht ändern, die ursprünglich von Usbccgp.sys festgelegt wird.

In Windows Vista und höheren Versionen von Windows können Sie jedoch die folgenden Registrierungswerte hinzufügen, um die zu wählende Konfiguration anzugeben:

Registrierungsschlüssel Typ Wert Standardwert
OriginalConfigurationValue REG_DWORD USB-Konfigurationsindex. Usbccgp.sys verwendet zuerst OriginalConfigurationValue für eine Select-Configuration-Anforderung. 0
AltConfigurationValue REG_DWORD Der Konfigurationsindex, der verwendet werden soll, wenn die Select-Configuration-Anforderung mit OriginalConfigurationValue fehlschlägt. 0

Hinweis

Die vorherigen Registrierungseinstellungen sind standardmäßig nicht vorhanden. Sie müssen unter dem Hardwareschlüssel (auch als "Gerät" bezeichnet) des USB-Geräts hinzugefügt werden.

Mit der Registrierungseinstellung kann der CCGP-Treiber eine alternative Konfiguration auswählen.

Registrierungswerte, die in der vorherigen Tabelle beschrieben werden, entsprechen dem usb-definierten Konfigurationsindex, der durch das bConfigurationValue-Element des Konfigurationsdeskriptors (USB_CONFIGURATION_DESCRIPTOR) und nicht durch die im Konfigurationsdeskriptor des Geräts gemeldeten bConfigurationNum-Werte angegeben wird. Zunächst sendet Usbccgp.sys mithilfe des von OriginalConfigurationValue angegebenen USB-Konfigurationsindexes eine Select-Configuration-Anforderung an den übergeordneten USB-Bustreiber (Usbhub.sys). Wenn diese Anforderung fehlschlägt, versucht Usbccgp.sys, den in AlternateConfigurationValue angegebenen Wert zu verwenden. Usbccgp.sys verwendet Standardwerte, wenn AlternateConfigurationValue oder OriginalConfigurationValue ungültig sind.

Eine Select-Configuration-Anforderung kann aus vielen Gründen fehlschlagen. Der häufigste Fehler tritt auf, wenn das Gerät nicht ordnungsgemäß auf die Anforderung reagiert oder wenn der bMaxPower-Wert (leistung erforderlich für die angeforderte Konfiguration) den vom Hubport unterstützten Energiewert überschreitet. bMaxPower für eine bestimmte Konfiguration (angegeben durch OriginalConfigurationValue) ist beispielsweise 100 Milliamperes, aber der Hubport kann nur 50 Milliamperes bereitstellen. Wenn Usbccgp.sys eine Select-Configuration-Anforderung für diese Konfiguration sendet, schlägt der USB-Treiberstapel (insbesondere der USB-Porttreiber) die Anforderung fehl. Usbccgp.sys sendet dann eine weitere Select-Configuration-Anforderung, indem sie die von AltConfigurationValue angegebene Konfiguration angeben. Wenn die alternative Konfiguration mindestens 50 Milliampere erfordert und keine anderen Probleme auftreten, wird die Select-Configuration-Anforderung erfolgreich abgeschlossen.

Kompatibilitätsfeature

Auch wenn ein Clienttreiber für eine Funktion im zusammengesetzten Gerät nicht in der Lage ist, die Konfiguration eines zusammengesetzten Geräts auszuwählen, kann der Clienttreiber dennoch eine Select-Configuration-Anforderung an Usbccgp.sys senden. Informationen zum Erstellen dieser Anforderung finden Sie unter Auswählen einer Konfiguration für ein USB-Gerät. Usbccgp.sys führt die folgenden Aufgaben aus, nachdem sie eine Select-Configuration-Anforderung von einem Clienttreiber erhalten haben:

  1. Überprüft die empfangene Anforderung mithilfe der gleichen Kriterien, die vom USB-Porttreiber verwendet werden, um alle Select-Configuration-Anforderungen zu überprüfen.
  2. Wenn die Anforderung Schnittstellen- oder Pipeeinstellungen angibt, die sich von den aktuellen Einstellungen unterscheiden, gibt Usbccgp.sys eine Select-Interface-Anforderung aus, indem eine URB des Typs URB_FUNCTION_SELECT_INTERFACE gesendet wird, um die vorhandenen Einstellungen in die neuen Schnittstellen- und Pipeeinstellungen zu ändern.
  3. Kopiert den zwischengespeicherten Inhalt der USBD_INTERFACE_INFORMATION - und USBD_PIPE_INFORMATION-Strukturen in die URB.
  4. Schließt die URB ab.