USB Interface Association Descriptor (IAD) und Composite-Device-Treiberbindung debuggen

Beheben Sie USB-Interface-Association-Descriptor (IAD) und Composite-Device-Treiberbindungs-Fehler. Behandelt Windows-usbccgp.sys, Code 10, Code 43, Interface-Deskriptoren und partielle Enumeration-Ausfälle.

USB-Composite-Device, falsche Treiberbindung, usbccgp, Code 10, Code 43, Interface-Deskriptor, USB-Diagnose

USB-Composite-Devices stellen mehrere Funktionen über ein physisches USB-Gerät bereit. Ein einzelnes Gerät kann HID-Controls, CDC-Serial, Mass-Storage, Vendor-Diagnose, Audio, Video und Firmware-Update-Interfaces bieten. Wenn die Treiberbindung schiefgeht, sehen Nutzer "USB Composite Device driver error", "This device cannot start Code 10", "Code 43", "interface not working", "COM port missing" oder "one function works but another does not".

Suchen wie "USB composite device wrong driver", "Windows usbccgp Code 10", "USB interface driver not binding" und "IAD descriptor debugging" brauchen meist Bus-Level-Evidence. Der Windows-Treiber-State allein zeigt nicht, ob die Deskriptoren die Funktionen korrekt beschreiben.

Bus Scope hilft, weil Composite-Binding von Deskriptoren getrieben wird.

Wie Composite-Devices strukturiert sind

Ein Composite-Device enthält einen Device-Deskriptor und eine oder mehrere Konfigurationen. Innerhalb einer Konfiguration legt es mehrere Interfaces offen. Jedes Interface hat Class/Subclass/Protocol-Werte und Endpoints.

Beispiel-Funktionen:

  • Interface 0: HID
  • Interface 1: CDC-Control
  • Interface 2: CDC-Data
  • Interface 3: Herstellerspezifische Diagnose

Windows nutzt den USB-Generic-Parent-Treiber, oft usbccgp.sys, um Child-Funktionen zu enumerieren und passende Treiber zu binden.

Interface Association Descriptor

IAD gruppiert mehrere Interfaces zu einer Funktion. CDC ACM nutzt üblicherweise ein Control-Interface und ein Data-Interface. Ohne korrektes IAD kann das OS sie falsch binden oder als unverwandte Interfaces behandeln.

Falsche IAD-Symptome:

  • CDC-Serial-COM-Port fehlt.
  • Audio-Funktion erscheint nur teilweise.
  • UVC-Kamera enumeriert, aber Video-Interface schlägt fehl.
  • Vendor-Interface stiehlt den falschen Treiber.
  • Nur eine Subfunktion läuft.

Prüfen Sie Interface-Nummern und IAD-Bereiche sorgfältig.

Class-Codes und Treiberwahl

Treiberbindung hängt von Class/Subclass/Protocol-Codes auf Device- oder Interface-Ebene ab. Ein Device-Level-Class von 0x00 bedeutet, dass die Class pro Interface definiert ist. Ein Device-Level-Class von 0xEF wird oft für diverse Composite-Devices mit IAD genutzt.

Deklariert die Firmware den falschen Class-Code, wählt Windows möglicherweise den falschen Treiber.

Für Custom-Devices seien Sie bewusst:

  • HID-Interfaces sollten HID korrekt beschreiben.
  • CDC-Interfaces sollten CDC-Erwartungen erfüllen.
  • Herstellerspezifische Interfaces sollten Vendor-Class nutzen.
  • WinUSB-Interfaces brauchen möglicherweise Microsoft-OS-Deskriptoren.

Code 10 und Code 43

Code 10 und Code 43 sind OS-Symptome, keine Root-Causes. Der USB-Trace kann zeigen, ob:

  • der Device-Deskriptor gelesen wurde.
  • der Configuration-Deskriptor gültig ist.
  • die Interface-Deskriptoren konsistent sind.
  • die Endpoint-Deskriptoren zu den Interface-Erwartungen passen.
  • klassenspezifische Deskriptoren fehlerhaft sind.
  • der Treiber einen Klassen-Request ausgegeben hat, der stalled.
  • das Gerät während des Bindings resettet hat.

Ist die Enumeration erfolgreich, aber ein Klassen-Request schlägt fehl, liegt das Problem nach dem einfachen Deskriptor-Read.

Partial-Device-Failure

Composite-Devices können teilweise laufen. Zum Beispiel HID-Buttons laufen, aber CDC-Serial nicht. Das heißt nicht, dass das Gerät einfach "tot" ist. Es heißt, dass ein Interface-Pfad fehlgeschlagen ist.

Bewahren Sie:

  • alle Interface-Deskriptoren.
  • klassenspezifische Deskriptoren.
  • Interface-Nummern.
  • Treiber-Klassen-Requests.
  • Endpoint-Traffic für das fehlerhafte Interface.

Debug-Checkliste

Nutzen Sie diesen Workflow:

  1. Ab Anstecken capturen.
  2. Device-Level-Class/Subclass/Protocol inspizieren.
  3. Configuration-Gesamtlänge und Interface-Anzahl inspizieren.
  4. Jeden Interface-Deskriptor inspizieren.
  5. IAD-Deskriptoren und Interface-Bereiche inspizieren.
  6. Klassenspezifische Deskriptoren inspizieren.
  7. Identifizieren, welches Interface nicht bindet.
  8. Nach gestallten Klassen-Requests suchen.
  9. Windows, Linux und ggf. eine andere Windows-Maschine vergleichen.
  10. Deskriptoren sichern, bevor Captures editiert werden.

Enddiagnose

USB-Composite-Treiberbindungs-Fehler kommen meist aus Deskriptor-Contracts: Class-Codes, Interface-Nummern, IAD-Gruppierung, klassenspezifische Deskriptoren, Microsoft-OS-Deskriptoren oder Klassen-Requests während des Treiber-Starts.

Bus Scope hilft, diese Contracts offenzulegen, sodass ein "USB Composite Device driver error" auf das exakte Interface und die Deskriptor-Evidence zurückgeführt werden kann.