USB-hostseitige Treiber in Windows

Dieser Artikel bietet 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.

Architekturblockdiagramm für USB 2.0- und 3.0-Treiberstapel.

Windows lädt den USB 2.0-Treiberstapel für Geräte, die an eHCI-, oHCI- oder uHCI-Controllern 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 die Komplexität und verbessert die Stabilität.

USB 3.0-Hostcontrollertreiber (Usbxhci.sys)

Der xHCI-Treiber ist der USB 3.0-Hostcontrollertreiber. Zu den Aufgaben des xHCI-Treibers gehören die Initialisierung von MMIO-Registern und hostspeicherbasierte 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 Übertragungsabschlussereignisse von der Hardware und verteilt die Ereignisse nach oben im Treiberstapel. Außerdem werden die Geräteslots und Endpunktkontexte des xHCI-Controllers gesteuert.

Windows lädt den xHCI-Treiber als Funktionsgeräteobjekt (Function Device Object, FDO) im Gerätestapel für den Hostcontroller.

USB-Hostcontrollererweiterung (Ucx01000.sys)

Der USB-Hostcontrollererweiterungstreiber (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 wurde entwickelt, um andere Arten von Hostcontrollertreibern zu unterstützen, die voraussichtlich in Zukunft entwickelt werden. Die USB-Hostcontrollererweiterung dient als allgemeine abstrahierte Schnittstelle für den Hubtreiber, stellt einen generischen Mechanismus zum Warteschlangen von Anforderungen an den Hostcontrollertreiber bereit und überschreibt bestimmte ausgewählte Funktionen. 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 die Anforderung dann an die richtige KMDF-Warteschlange weiter, die dem Zielendpunkt zugeordnet ist. Der xHCI-Treiber ruft die Anforderung aus der Warteschlange ab, wenn er für die Verarbeitung bereit ist. Der Erweiterungstreiber des USB-Hostcontrollers hat folgende Aufgaben:

  • 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 konfiguriert werden können, z. B. verkettete MDLs, Streams 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 die folgenden Aufgaben aus:

  • Verwaltet USB-Hubs und deren Anschlüsse.
  • Listet Geräte und andere Hubs auf, die an ihre Downstreamports angefügt sind.
  • Erstellt physische Geräteobjekte (PDOs) für die aufgelisteten Geräte und Hubs.

Windows lädt den Hubtreiber als FDO in den Hubgerätestapel. Geräteenumeration und Hubverwaltung im neuen Treiber werden über eine Reihe von Zustandscomputern implementiert. Der Hubtreiber nutzt KMDF für die Energieverwaltung und PnP-Funktionen. Zusätzlich zur Hubverwaltung führt der Hubtreiber auch vorläufige Überprüfungen und Verarbeitung bestimmter Anforderungen durch, die von der USB-Clienttreiberebene gesendet werden. Für instance analysiert der Hubtreiber eine Select-Configuration-Anforderung, um zu bestimmen, welche Endpunkte von der Anforderung konfiguriert werden. Nach der Analyse der Informationen übermittelt der Hubtreiber die Anforderung an die USB-Hostcontrollererweiterung 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-Controllern 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 zu ermöglichen, wie in der USB 2.0-Spezifikation definiert.

Am unteren Rand des USB-Treiberstapels befindet sich der Hostcontrollertreiber. Es besteht aus dem Porttreiber, Usbport.sys und einem oder mehreren von drei Miniporttreibern, die gleichzeitig ausgeführt werden. Wenn das System Hostcontrollerhardware erkennt, lädt es einen dieser Miniporttreiber. Der Miniporttreiber lädt den Porttreiber, nachdem er geladen wurde, Usbport.sys. Der Porttreiber behandelt die Aufgaben des Hostcontrollertreibers, die unabhängig vom jeweiligen 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 High-Speed-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, ist das Betriebssystem in der Lage, USB 1.1- und USB 2.0-Hostcontroller gleichzeitig zu verwalten. Immer wenn das Betriebssystem erkennt, dass beide Controllertypen vorhanden sind, erstellt es zwei separate Geräteknoten, einen 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.

Oberhalb des Porttreibers befindet sich der USB-Bustreiber, Usbhub.sys, der auch als Hubtreiber bezeichnet wird. Dies ist der Gerätetreiber für jeden Hub auf dem System.

Allgemeiner übergeordneter USB-Treiber (Usbccgp.sys)

Der generische übergeordnete USB-Treiber für allgemeine Klassen ist der von Microsoft bereitgestellte übergeordnete Treiber für zusammengesetzte Geräte. Der Hubtreiber listet und lädt den übergeordneten zusammengesetzten Treiber, wenn deviceClass 0 oder 0xef und numInterfaces im Gerätedeskriptor größer als 1 ist. Der Hubtreiber generiert die kompatible ID für den übergeordneten zusammengesetzten Treiber 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 eine PDO für jedes Gerät. Dies bewirkt, dass für jede Funktion im Gerät die entsprechende Klasse oder der entsprechende Clienttreiber geladen wird. Jeder Funktionstreiber (untergeordnete pDO) sendet Anforderungen an den übergeordneten Treiber, der sie an den USB-Hubtreiber übermittelt.

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 von Funktionen und remote wake-up zu implementieren, wie in der USB 3.0-Spezifikation definiert.

Weitere Informationen finden Sie unter USB Generic Parent Driver (Usbccgp.sys).

WinUSB (Winusb.sys)

Windows USB (WinUSB) ist ein von Microsoft bereitgestellter generischer Treiber für USB-Geräte. Die WinUSB-Architektur besteht aus einem Kernelmodustreiber (Winusb.sys) und einer Dynamischen Linkbibliothek im Benutzermodus (Winusb.dll). Für Geräte, die keinen benutzerdefinierten Funktionstreiber benötigen, können Winusb.sys im Kernelmodusstapel des Geräts als Funktionstreiber 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 unter WinUSB.

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 Geräte geladen werden, die im MS-Betriebssystemdeskriptor über eine entsprechende WinUSB-kompatible ID verfügen. Solche Geräte werden als WinUSB-Geräte bezeichnet. Hardwarehersteller müssen keine INF-Datei für ihr WinUSB-Gerät verteilen, was den Treiberinstallationsprozess für den Endbenutzer vereinfacht. 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 zur 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 befindet sich direkt über dem Hubtreiber.

Für ein zusammengesetztes USB-Gerät, das mehrere Funktionen verfügbar macht und keinen übergeordneten Klassentreiber aufweist, lädt Windows den generischen übergeordneten USB-Treiber (Usbccgp.sys) zwischen dem Hubtreiber und der Clienttreiberebene. Der übergeordnete Treiber erstellt eine separate PDO für jede Funktion eines zusammengesetzten Geräts. Clienttreiber (FDOs für Funktionen) werden über dem generischen übergeordneten Treiber geladen. Anbieter können sich dafür entscheiden, für jede Funktion einen separaten Clienttreiber bereitzustellen.

Ein USB-Clienttreiber kann je nach Den Anforderungen des Treibers 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, um Kernelmodustreibern und Anwendungen bei der Kommunikation mit dem USB-Treiberstapel zu helfen:

  • Usbd.sys

    Microsoft stellt die Usbd.sys-Bibliothek bereit, die Routinen für USB-Clienttreiber exportiert. Die Hilfsroutinen vereinfachen die operativen Aufgaben eines Clienttreibers. Für instance kann ein USB-Clienttreiber mithilfe der Hilfsroutinen USB Request Blocks (URBs) für bestimmte bestimmte Vorgänge erstellen, z. B. die Auswahl einer Konfiguration, und diese URBs an den USB-Treiberstapel übermitteln.

  • Usbdex.lib

    Diese Hilfsbibliothek ist neu für Windows 8. Die Bibliothek exportiert Routinen in erster Linie zum Zuweisen und Erstellen von URBs. Diese Routinen ersetzen einige der Legacyroutinen, die von Usbd.sys exportiert werden. Die neuen Routinen erfordern, dass sich der Clienttreiber beim USB-Treiberstapel registriert, der das Handle für die Registrierung beibehält. Dieses Handle wird für Aufrufe anderer Usbdex.lib-Routinen verwendet. Bestimmte URBs, die von den neuen Routinen zugewiesen werden, verfügen über einen URB-Kontext, den der USB-Treiber für eine bessere Nachverfolgung und Verarbeitung verwendet. Weitere Informationen finden Sie unter Zuweisen und Erstellen von URBs.

  • Winusb.dll

    Winusb.dll ist eine Benutzermodus-DLL, die WinUSB-Funktionen für die Kommunikation mit Winusb.sys verfügbar macht, die als Gerätefunktionstreiber im Kernelmodus geladen wird. Anwendungen verwenden diese Funktionen, um das Gerät zu konfigurieren, Informationen zum 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.