USB-Host-seitige Treiber in Windows
Dieser Artikel enthält eine Übersicht über die Usb-Treiberstapelarchitektur (Universal Serial Bus).
Die folgende Abbildung zeigt das Architekturblockdiagramm des USB-Treiberstapels für Windows. Das Diagramm zeigt separate USB-Treiberstapel für USB 2.0 und USB 3.0. Windows lädt den USB 3.0-Treiberstapel, wenn ein Gerät an einen xHCI-Controller angeschlossen ist.
Windows lädt den USB 2.0-Treiberstapel für Geräte, die an eHCI-, oHCI- oder uHCI-Controller angeschlossen sind. Der USB 2.0-Treiberstapel wird in Windows XP mit Service Pack 1 (SP1) und höheren Versionen des Windows-Betriebssystems ausgeliefert.
USB 3.0-Treiberstapel
Microsoft hat die USB 3.0-Treiber mithilfe von KMDF-Schnittstellen (Kernel Mode Driver Framework) erstellt. Das KMDF-Treibermodell reduziert komplexität und verbessert die Stabilität.
USB 3.0-Hostcontrollertreiber (Usbxhci.sys)
Der xHCI-Treiber ist der USB 3.0-Hostcontrollertreiber. Zu den Zuständigkeiten des xHCI-Treibers gehören die Initialisierung von MMIO-Registern und hosten speicherbasierte Datenstrukturen für xHCI-Controllerhardware, das Zuordnen von Übertragungsanforderungen von Treibern der oberen Ebene zu Übertragungsanforderungsblöcken und das Übermitteln der Anforderungen an die Hardware. Nach Abschluss einer Übertragung verarbeitet der Treiber Vervollständigungsereignisse von der Hardware und verteilt die Ereignisse auf den Treiberstapel. Außerdem werden die xHCI-Controllergeräteplätze und Endpunktkontexte gesteuert.
Windows lädt den xHCI-Treiber als Funktionsgeräteobjekt (Function Device Object, FDO) im Gerätestapel für den Hostcontroller.
ERWEITERUNG des USB-Hostcontrollers (Ucx01000.sys)
Der Erweiterungstreiber des USB-Hostcontrollers (eine Erweiterung für KMDF) ist die neue Erweiterung des zugrunde liegenden klassenspezifischen Hostcontrollertreibers, z. B. des xHCI-Treibers. Der neue Treiber ist erweiterbar und soll andere Arten von Hostcontrollertreibern unterstützen, die in Zukunft entwickelt werden sollen. Die ERWEITERUNG des USB-Hostcontrollers dient als allgemeine abstrahierte Schnittstelle zum Hubtreiber, stellt einen generischen Mechanismus zum Warteschlangen von Anforderungen an den Hostcontrollertreiber bereit und setzt bestimmte ausgewählte Funktionen außer Kraft. Alle von oberen Treibern initiierten E/A-Anforderungen erreichen den Hostcontrollererweiterungstreiber vor dem xHCI-Treiber. Beim Empfang einer E/A-Anforderung überprüft die Hostcontrollererweiterung die Anforderung und leitet dann die Anforderung an die richtige KMDF-Warteschlange weiter, die dem Zielendpunkt zugeordnet ist. Der xHCI-Treiber ruft die Anforderung bei der Verarbeitung aus der Warteschlange ab. Die Verantwortlichkeiten des USB-Hostcontroller-Erweiterungstreibers sind:
- Stellt USB-spezifische Objekte für den xHCI-Treiber bereit.
- Stellt KMDF-Ereignisrückrufroutinen für den xHCI-Treiber bereit.
- Verwaltet und steuert die Vorgänge des Stammhubs, der dem Hostcontroller zugeordnet ist.
- Implementiert Features, die vom Clienttreiber konfigurierbar sind, z. B. verkettete MDLs, Datenströme usw.
USB-Hubtreiber (Usbhub3.sys)
Der neue Hubtreiber im USB-Treiberstapel für 3.0-Geräte verwendet das KMDF-Treibermodell. Der Hubtreiber führt in erster Linie diese Aufgaben aus:
- Verwaltet USB-Hubs und deren Anschlüsse.
- Listet Geräte und andere Hubs auf, die an ihre Downstreamports angeschlossen sind.
- Erstellt physische Geräteobjekte (PDOs) für die aufgezählten Geräte und Hubs.
Windows lädt den Hubtreiber als FDO im Hubgerätestapel. Geräteaufzählung und Hubverwaltung im neuen Treiber werden über eine Reihe von Zustandscomputern implementiert. Der Hubtreiber basiert auf KMDF für die Energieverwaltung und PnP-Funktionen. Zusätzlich zur Hubverwaltung führt der Hubtreiber auch vorab Prüfungen und Verarbeitung bestimmter Anforderungen durch, die von der USB-Clienttreiberebene gesendet werden. Beispielsweise analysiert der Hubtreiber eine Auswahlkonfigurationsanforderung, um zu bestimmen, welche Endpunkte von der Anforderung konfiguriert werden. Nach der Analyse der Informationen übermittelt der Hubtreiber die Anforderung an die ERWEITERUNG des USB-Hostcontrollers oder die weitere Verarbeitung.
USB 2.0-Treiberstapel
Windows lädt den USB 2.0-Treiberstapel für Geräte, die an eHCI-, oHCI- oder uHCI-Controller angeschlossen sind. Die Treiber im USB 2.0-Treiberstapel werden in Windows XP mit SP1 und höheren Versionen des Windows-Betriebssystems ausgeliefert. Der USB 2.0-Treiberstapel wurde entwickelt, um hochgeschwindigkeits-USB-Geräte gemäß der USB 2.0-Spezifikation zu vereinfachen.
Am unteren Rand des USB-Treiberstapels befindet sich der Hostcontrollertreiber. Sie besteht aus dem Porttreiber, Usbport.sys und einem oder mehreren drei Miniporttreibern, die gleichzeitig ausgeführt werden. Wenn das System Hostcontrollerhardware erkennt, lädt es einen dieser Miniporttreiber. Der Miniporttreiber lädt nach dem Laden den Porttreiber, Usbport.sys. Der Porttreiber behandelt diese Aspekte der Aufgaben des Hostcontrollertreibers, die unabhängig vom spezifischen Protokoll sind.
Der Miniporttreiber Usbuhci.sys (Universelle Hostcontrollerschnittstelle) ersetzt den Uhcd.sys Miniklassentreiber, der mit Windows 2000 ausgeliefert wurde. Der Miniporttreiber Usbohci.sys (offene Hostcontrollerschnittstelle) ersetzt Openhci.sys. Der Usbehci.sys Miniporttreiber unterstützt Hochgeschwindigkeits-USB-Geräte und wurde in Windows XP mit SP1 und höher und Windows Server 2003 und höher eingeführt.
In allen Versionen von Windows, die USB 2.0 unterstützen, kann das Betriebssystem USB 1.1- und USB 2.0-Hostcontroller gleichzeitig verwalten. Wenn das Betriebssystem erkennt, dass beide Controllertypen vorhanden sind, erstellt es zwei separate Geräteknoten, eine für jeden Hostcontroller. Windows lädt anschließend den Usbehci.sys Miniporttreiber für die USB 2.0-kompatible Hostcontrollerhardware und je nach Systemkonfiguration entweder Usbohci.sys oder Openhci.sys für die USB 1.1-kompatible Hardware.
Über dem Anschlusstreiber befindet sich der USB-Bustreiber, Usbhub.sys, auch bekannt als Hubtreiber. Dies ist der Gerätetreiber für jeden Hub auf dem System.
Allgemeiner übergeordneter USB-Treiber (Usbccgp.sys)
Der allgemeine generische Übergeordnete Treiber der USB-Klasse ist der von Microsoft bereitgestellte übergeordnete Treiber für Verbundgeräte. Der Hubtreiber listet den übergeordneten zusammengesetzten Treiber auf und lädt sie, wenn deviceClass 0 oder 0xef und numInterfaces größer als 1 im Gerätedeskriptor ist. Der Hubtreiber generiert die kompatible ID für den übergeordneten Verbundtreiber als "USB\COMPOSITE". Usbccgp.sys verwendet WdM-Routinen (Windows Driver Model).
Der übergeordnete zusammengesetzte Treiber listet alle Funktionen in einem zusammengesetzten Gerät auf und erstellt für jeden einen PDO. Dies bewirkt, dass die entsprechende Klasse oder der entsprechende Clienttreiber für jede Funktion auf dem Gerät geladen wird. Jeder Funktionstreiber (untergeordnetes PDO) sendet Anforderungen an den übergeordneten Treiber, der sie an den USB-Hubtreiber sendet.
Usbccgp.sys ist in Windows XP mit SP1 und höheren Versionen des Windows-Betriebssystems enthalten. In Windows 8 wurde der Treiber aktualisiert, um Funktionen zum Anhalten und Remote-Wake-Up zu implementieren, wie in der USB 3.0-Spezifikation definiert.
Weitere Informationen finden Sie unter Generischer übergeordneter USB-Treiber (Usbccgp.sys).
WinUSB (Winusb.sys)
Windows USB (WinUSB) ist ein von Microsoft bereitgestellter generischer Treiber für USB-Geräte. WinUSB-Architektur besteht aus einem Kernelmodustreiber (Winusb.sys) und einer Dynamic Link Library (Winusb.dll). Für Geräte, die keinen benutzerdefinierten Funktionstreiber benötigen, kann Winusb.sys als Funktionstreiber im Kernelmodusstapel des Geräts installiert werden. Benutzermodusprozesse können dann mit Winusb.sys kommunizieren, indem sie eine Reihe von Geräte-E/A-Steuerungsanforderungen verwenden oder WinUsb_Xxx Funktionen aufrufen. Weitere Informationen finden Sie in der Einführung in WinUSB für Entwickler.
In Windows 8 enthält die von Microsoft bereitgestellte Informationsdatei (INF) für WinUSB, Winusb.inf, USB\MS_COMP_WINUSB als Gerätebezeichnerzeichenfolge. Dadurch können Winusb.sys automatisch als Funktionstreiber für diese Geräte geladen werden, die über eine übereinstimmende WinUSB-kompatible ID im MS OS-Deskriptor verfügen. Solche Geräte werden als WinUSB-Geräte bezeichnet. Hardwarehersteller müssen keine INF-Datei für ihr WinUSB-Gerät verteilen, wodurch der Treiberinstallationsprozess für den Endbenutzer einfacher wird. Weitere Informationen finden Sie unter WinUSB-Gerät.
USB-Clienttreiber
Jedes USB-Gerät, zusammengesetzt oder nicht zusammengesetzt, wird von einem Clienttreiber verwaltet. Ein USB-Clienttreiber ist ein Klassen- oder Gerätetreiber, der ein Client des USB-Treiberstapels ist. Zu diesen Treibern gehören klassen- und gerätespezifische Treiber von Microsoft oder einem Drittanbieter. Eine Liste der von Microsoft bereitgestellten Klassentreiber finden Sie unter "Treiber für die unterstützten USB-Geräteklassen". Ein Clienttreiber erstellt Anforderungen für die Kommunikation mit dem Gerät, indem öffentliche Schnittstellen aufgerufen werden, die vom USB-Treiberstapel verfügbar gemacht werden.
Ein Clienttreiber für ein zusammengesetztes Gerät unterscheidet sich nicht von einem Clienttreiber für ein nicht zusammengesetztes Gerät, mit Ausnahme seiner Position im Treiberstapel.
Ein Clienttreiber für ein nicht zusammengesetztes Gerät wird direkt über dem Hubtreiber angeordnet.
Bei einem zusammengesetzten USB-Gerät, das mehrere Funktionen verfügbar macht und nicht über einen übergeordneten Klassentreiber verfügt, lädt Windows den generischen übergeordneten USB-Treiber (Usbccgp.sys) zwischen dem Hubtreiber und der Clienttreiberebene. Der übergeordnete Treiber erstellt für jede Funktion eines zusammengesetzten Geräts eine separate PDO. Clienttreiber (FDOs für Funktionen) werden über dem generischen übergeordneten Treiber geladen. Anbieter können für jede Funktion einen separaten Clienttreiber bereitstellen.
Je nach den Anforderungen des Treibers kann ein USB-Clienttreiber entweder im Benutzermodus oder im Kernelmodus ausgeführt werden. USB-Clienttreiber können mithilfe von KMDF-, UMDF- oder WDM-Routinen geschrieben werden.
Hilfsbibliotheken für Clienttreiber
Microsoft stellt die folgenden Hilfsbibliotheken bereit, mit denen Kernelmodustreiber und -anwendungen mit dem USB-Treiberstapel kommunizieren können:
Usbd.sys
Microsoft stellt die Usbd.sys Bibliothek bereit, die Routinen für USB-Clienttreiber exportiert. Die Hilfsroutinen vereinfachen die operativen Aufgaben eines Clienttreibers. Beispielsweise kann mithilfe der Hilfsroutinen ein USB-Clienttreiber USB-Anforderungsblöcke (URBs) für bestimmte bestimmte Vorgänge erstellen, z. B. eine Konfiguration auswählen und diese URBs an den USB-Treiberstapel übermitteln.
Usbdex.lib
Diese Hilfsbibliothek ist neu für Windows 8. Die Bibliothek exportiert Routinen hauptsächlich zum Zuordnen und Erstellen von URBs. Diese Routinen ersetzen einige der älteren Routinen, die von Usbd.sys exportiert werden. Für die neuen Routinen muss sich der Clienttreiber beim USB-Treiberstapel registrieren, der das Handle für die Registrierung verwaltet. Dieser Handle wird für Anrufe an andere Usbdex.lib-Routinen verwendet. Bestimmte URBs, die von den neuen Routinen zugewiesen werden, weisen einen URB-Kontext auf, den der USB-Treiber für eine bessere Nachverfolgung und Verarbeitung verwendet. Weitere Informationen finden Sie unter "Allocating" und "Building URBs".
Winusb.dll
Winusb.dll ist eine Benutzermodus-DLL, die WinUSB-Funktionen für die Kommunikation mit Winusb.sys verfügbar macht, die als Funktionstreiber eines Geräts im Kernelmodus geladen wird. Anwendungen verwenden diese Funktionen, um das Gerät zu konfigurieren, Informationen über das Gerät abzurufen und E/A-Vorgänge auszuführen. Informationen zur Verwendung dieser Funktionen finden Sie unter "Zugreifen auf ein USB-Gerät mithilfe von WinUSB-Funktionen".