WinUSB-Architektur und -Module
WinUSB besteht aus zwei primären Komponenten:
- Winusb.sys ist ein Kernelmodustreiber, der entweder als Filter- oder Funktionstreiber über den Protokolltreibern im Kernelmodus-Gerätestapel eines USB-Geräts installiert werden kann.
- Winusb.dll ist eine Benutzermodus-DLL, die WinUSB-Funktionen verfügbar macht. Anwendungen können diese Funktionen verwenden, um mit Winusb.sys zu kommunizieren, wenn es als Funktionstreiber eines Geräts installiert ist.
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-Funktionen aufrufen.
Die folgende Abbildung zeigt einen USB-Treiberstapel, der mehrere Instanzen von Winusb.sys enthält.
Die obige Abbildung zeigt eine Beispielkonfiguration von WinUSB, die drei Geräteschnittstellenklassen implementiert, von denen jede über eine einzelne registrierte Geräteschnittstelle verfügt:
- Instanz 1 von Winusb.sys registriert die Geräteschnittstelle A, die einen Benutzermodustreiber (Usboem.dll) unterstützt.
- Instanz 2 von Winusb.sys registriert die Geräteschnittstelle B, die einen Benutzermodustreiber für einen Scanner (Usbscan.exe) unterstützt, der mit Winusb.dll mithilfe eines Systemdiensts (SVCHOST) kommuniziert.
- Instanz 3 von Winusb.sys registriert die Geräteschnittstelle C, die ein Firmwareupdateprogramm (Usbfw.exe) unterstützt.
Es gibt genau eine geladene Instanz von Winusb.sys. Ein physisches Geräteobjekt (PDO) kann ein Nicht-Verbundgerät (Instanz 1 im Diagramm) oder eine Schnittstelle oder Schnittstellensammlung auf einem Verbundgerät (Instanzen 2 und 3) darstellen. Bei Geräten der USB Wireless Mobile Communication Device Class (WMCDC) kann ein PDO sogar mehrere Schnittstellensammlungen darstellen. (Weitere Informationen zu PDOs für WMCDC-Geräte finden Sie unter Unterstützung für die Wireless Mobile Communication Device Class.)
Jede Benutzermodusanwendung kann mit dem USB-Stapel kommunizieren, indem die WinUSB Dynamic Link Library (Winusb.dll) geladen und die WinUSB-Funktionen aufgerufen werden, die von diesem Modul verfügbar gemacht werden.