USB-geräteseitige Treiber in Windows

Beschreibt die Architektur des USB-Funktionsstapels.

Auf einem USB-Gerät bezieht sich der USB-Funktionsstapel auf eine Gruppe von Treibern, die vom Plug & Play-Manager aufgezählt werden, wenn ACPI ein physisches USB-Geräteobjekt (PDO) erstellt.

In einem einzigen Konfigurationsgerät kann ein USB-Gerät eine oder mehrere Schnittstellen definieren. Beispielsweise das Medienübertragungsprotokoll (Media Transfer Protocol, MTP) zum Übertragen von Dateien auf und vom Gerät. Ein zusammengesetztes USB-Gerät kann mehrere Schnittstellen in einer einzigen Konfiguration unterstützen. Der USB-Funktionsstapel erstellt PDOs für jede Schnittstelle, und der PnP-Manager lädt den Klassentreiber, der das Funktionsgeräteobjekt (FDO) für diese Schnittstelle erstellt.

Der USB-Funktionsstapel ist in dieser Abbildung konzipiert:

USB-Funktionsstapel.

Anwendungen und Dienste

  • Alle Benutzermodusanforderungen werden an den von Microsoft bereitgestellten Kernelmodusklassentreiber GenericUSBFn.sys gesendet. Sie können einen Benutzermodusdienst erstellen, der mit GenericUSBFn.sys kommuniziert, indem Sie I/O-Steuercodes (IOCTLs) senden, wie in genericusbfnioctl.h definiert. Weitere Informationen zu diesen IOCTLs finden Sie unter Kommunizieren mit GenericUSBFn.sys von einem Benutzermodusdienst

USB-Funktionsklassentreiber

Ein USB-Funktionsklassentreiber implementiert die Funktionalität einer bestimmten Schnittstelle (oder Einer Gruppe von Schnittstellen) auf dem USB-Gerät. MTP und IpOverUsb sind Beispiele für vom System bereitgestellte Klassentreiber. Der Klassentreiber kann rein als Kernelmodustreiber implementiert werden, oder es kann sich um einen Benutzermodusdienst handeln, der mit dem vom System bereitgestellten Klassentreiber GenericUSBFn.sys gekoppelt ist.

Ein Funktionsklassentreiber sendet Anforderungen an den Controller mithilfe des USB-Funktionsklassentreibers an UFX-Programmierschnittstellen.

USB-Funktionsklassenerweiterung (UFX)

Die USB-Funktionsklassenerweiterung (UFX) ist eine vom System bereitgestellte Erweiterung für Kernel-Mode Driver Framework (KMDF). USB ist ein Standardbus und verfügt über einige erforderliche Funktionen und Funktionen. UFX ist für die Implementierung von USB-Funktionslogik verantwortlich, die für alle USB-Funktionscontroller und -Verarbeitungs- und/oder Versandanforderungen von USB-Funktionsklassentreibern üblich ist. Insbesondere behandelt UFX den Prozess der Aufzählung der Geräte- und Verarbeitungsstandardsteuerungsübertragungen. Um einige dieser Vorgänge auszuführen, muss UFX über die Funktionen des Busses wissen. Diese Funktionen werden UFX gemeldet, wenn die Klassenerweiterungsschnittstelle eingerichtet wird.

UFX macht standardmäßige IOCTLs verfügbar, die die oberen Ebenen (USB-Funktionsklassentreiber und Benutzermodusdienste) zum Senden von Anforderungen an den Controller verwenden können. Darüber hinaus benachrichtigen UFX obere Ebenen über die standardanforderungen, die vom Host empfangen wurden.

USB-Funktionsclienttreiber

UFX bietet eine abstrahierte Schnittstelle, die konsistent über verschiedene Controller hinweg funktioniert. Controller verfügen jedoch über unterschiedliche Funktionen, mit Einschränkungen wie der Anzahl der Endpunkte, den Arten von Endpunkten, niedriger Leistung, Remote-Wake-up. Beispielsweise unterstützen bestimmte Controller DMA, während andere nicht. Einige Controller implementieren Datenströme in der Hardware, während andere Controller erwarten, dass der Treiber Datenströme verarbeitet. Aus diesen Gründen wird nur die allgemeine Funktionalität in UFX behandelt. Übertragungen, Energieverwaltung, Streamunterstützung und andere Features, die vom Controller zum Controller variieren, werden vom Clienttreiber behandelt.

Der USB-Funktionsclienttreiber ist für die Implementierung controllerspezifischer Vorgänge verantwortlich. Dazu gehören die Implementierung von Endpunktdatenübertragungen, USB-Gerätezustandsänderungen (Zurücksetzen, Anhalten, Fortsetzen), Anfügen/Trennen der Erkennung, Port-/Ladegeräterkennung. Der Clienttreiber ist auch für die Behandlung von Energieverwaltungs- und PnP-Ereignissen verantwortlich.

Der Funktionsclienttreiber wird als Kernel-Mode Driver Framework (KMDF)-Treiber mithilfe des USB-Funktionsklassentreibers zu UFX-Programmierschnittstellen geschrieben.

Microsoft stellt funktionsinterne Clienttreiber (UfxChipidea.sys, Ufxsynopsys.sys) für ChipIdea- und Synopsys-Controller bereit.

USB-Niedrigerer Filtertreiber

Ein USB-niedrigerer Filtertreiber unterstützt die Erkennung von Ladegeräten, wenn der Funktionscontroller die integrierten Synopsys- und ChipIdea-Treiber verwendet. Der Filtertreiber verwaltet die USB-Ladefunktion ab der USB-Anschlusserkennung. Sie muss eine GUID für jeden unterstützten Ladegerättyp und eine Liste der Eigenschaften dieses Ladegeräts veröffentlichen. Wenn ein bestimmtes Ladegerät konfigurierbar ist, definiert der niedrigere USB-Filtertreiber eine Liste der unterstützten PropertyIDs und der entsprechenden Werttypen, die an das Ladegerät gesendet werden können, um das Ladegerät zu konfigurieren. Der Treiber benachrichtigt auch den Akkustapel, wenn er mit dem Laden beginnen kann und die maximale Anzahl von Strom, den das Gerät zeichnen kann. Bei clientseitigen Treibern als Synopsys- und ChipIdea-Treibern kann ladelogik im Clienttreiber implementiert werden.

Ein Funktionsklassentreiber sendet eine Anforderung an UFX mithilfe von Programmierschnittstellen zur Unterstützung proprietärer Ladegeräte.