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 USB Device Physical Device Object (PDO) erstellt.

In einem einzelnen Konfigurationsgerät kann ein USB-Gerät eine oder mehrere Schnittstellen definieren. Beispielsweise das 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 (Function Device Object, FDO) für diese Schnittstelle erstellt.

Der USB-Funktionsstapel ist in diesem Image 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-Kontrollcodes (IOCTLs) senden, wie in genericusbfnioctl.h definiert. Weitere Informationen zu diesen IOCTLs finden Sie unter Kommunizieren mit GenericUSBFn.sys aus einem Benutzermodusdienst.

USB-Funktionsklassentreiber

Ein USB-Funktionsklassentreiber implementiert die Funktionalität einer bestimmten Schnittstelle (oder Gruppe von Schnittstellen) auf dem USB-Gerät. MTP und IpOverUsb sind Beispiele für vom System bereitgestellte Klassentreiber. Der Klassentreiber kann nur 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 des 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 allen USB-Funktionscontrollern gemeinsam ist, und für die Verarbeitung und/oder Das Senden von Anforderungen von USB-Funktionsklassentreibern. UFX übernimmt insbesondere den Prozess der Aufzählung des Geräts und der Verarbeitung von Standardsteuerungsübertragungen. Um einige dieser Vorgänge auszuführen, muss UFX über die Funktionen des Busses bescheid wissen. Diese Funktionen werden an UFX gemeldet, wenn die Klassenerweiterungsschnittstelle eingerichtet wird.

UFX macht Standard-IOCTLs verfügbar, die die oberen Ebenen (USB-Funktionsklassentreiber und Benutzermodusdienste) verwenden können, um Anforderungen an den Controller zu senden. Darüber hinaus benachrichtigt UFX die oberen Ebenen über die Vom Host empfangenen Standardanforderungen.

USB-Funktionsclienttreiber

UFX bietet eine abstrahierte Schnittstelle, die konsistent über verschiedene Controller hinweg funktioniert. Controller verfügen jedoch über unterschiedliche Funktionen, z. B. die Anzahl der Endpunkte, die Arten von Endpunkten, geringe Leistung und Remotereaktivierung. Beispielsweise unterstützen bestimmte Controller DMA, während andere dies nicht tun. Einige Controller implementieren Datenströme in der Hardware, während andere Controller erwarten, dass der Treiber Datenströme verarbeitet. Aus diesen Gründen werden in UFX nur allgemeine Funktionen behandelt. Übertragungen, Energieverwaltung, Streamunterstützung und andere Funktionen, die von Controller zu Controller variieren, werden vom Clienttreiber verarbeitet.

Der USB-Funktionsclienttreiber ist für die Implementierung controllerspezifischer Vorgänge verantwortlich. Dazu gehören die Implementierung von Endpunkt-Datenübertragungen, ÄNDERUNGEN des USB-Gerätezustands (Zurücksetzen, Anhalten, Fortsetzen), An-/Abtrennerkennung, 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 geschrieben, indem usb-Funktionsklassentreiber zu UFX-Programmierschnittstellen verwendet werden.

Microsoft stellt im Lieferumfang enthaltene Funktionsclienttreiber (UfxChipidea.sys, Ufxsynopsys.sys) für ChipIdea- und Synopsys-Controller bereit.

USB-Unterfiltertreiber

Ein USB-Unterfiltertreiber unterstützt die Erkennung von Ladegeräten, wenn der Funktionscontroller die mitgelieferten Synopsys- und ChipIdea-Treiber verwendet. Der Filtertreiber verwaltet das USB-Laden ab der USB-Porterkennung. t muss eine GUID für jeden unterstützten Ladetyp 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 zum Konfigurieren des Ladegeräts an das Ladegerät gesendet werden können. Der Treiber benachrichtigt den Akkustapel auch, wenn er mit dem Laden beginnen kann und die maximale Strommenge, die das Gerät ziehen kann. Für andere Clienttreiber als Synopsys- und ChipIdea-Treiber kann ladelogik im Clienttreiber implementiert werden.

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