Architektur: USB-Hostcontrollererweiterung (UCX)
In diesem Abschnitt werden allgemeine Konzepte und Aufgaben für die Entwicklung von Hosttreibern vorgestellt. Der Abschnitt gilt für Sie, wenn Sie einen neuen Hostcontrollertreiber schreiben, der mit dem von Microsoft bereitgestellten USB-Hostcontrollererweiterungstreiber (Ucx01000.sys) kommuniziert.
Hier sehen Sie eine geänderte Version eines Diagramms, das in usb-hostseitigen Treibern in Windows gezeigt wird. Diese Version blendet die Details der USB-Clienttreiberebene aus, die für die Entwicklung des Hostcontrollertreibers nicht relevant sind.
In der obigen Abbildung
- DER USB-Hubtreiber (Usbhub3.sys) ist ein KMDF-Treiber. Der Hubtreiber ist für die Verwaltung von USB-Hubs und deren Ports sowie für die Enumeration und Erstellung physischer Geräteobjekte (PDOs) von USB-Geräten und anderen Hubs verantwortlich, die an deren Downstreamports angeschlossen werden können.
- Die USB-Hostcontrollererweiterung (Ucx01000.sys) ist eine Abstraktionsebene für den Hubtreiber oben im Stapel und stellt einen generischen Mechanismus zum Anstehen von Anforderungen an den zugrunde liegenden Hostcontrollertreiber bereit.
- Der USB-Hostcontrollertreiber verwaltet die Hardware. Usbxhci.sys ist ein solcher Treiber, der von Microsoft bereitgestellt wird und insbesondere auf xHCI-spezifikationskonforme USB-Controllerhardware abzielt. Es kann erforderlich sein, dass unabhängige Hardwareentwickler ihren eigenen Hostcontrollertreiber schreiben, anstatt den Posteingang Usbxhci.sys zu verwenden. Beispielsweise für eine XHCI-Hardware, die nicht vollständig mit der Spezifikation konform ist und daher Usbxhci.sys nicht verwenden kann, oder für Nicht-XHCI-Hardware, z. B. USB-über TCP-Verbindung.
Die bidirektionale Kommunikation zwischen UCX und dem Hostcontrollertreiber erfolgt mithilfe von UCX-Programmierschnittstellen (USB Host Controller Extension). Jeder Treiber ist statisch mit den Einstiegspunkten in der von Microsoft bereitgestellten Stubbibliothek (Ucx01000.lib) verknüpft, wenn der Treiber kompiliert wird.
Hier sind die Gerätestapel, die für den Hostcontrollertreiber geladen wurden: