WinUSB-Gerät
In diesem Artikel erfahren Sie, wie ein WinUSB-Gerät von Windows erkannt wird.
Die Informationen in diesem Artikel gelten für Sie, wenn Sie ein OEM oder ein unabhängiger Hardwarehersteller (IHV) sind, der ein Gerät entwickelt, für das Sie Winusb.sys als Funktionstreiber verwenden möchten und den Treiber automatisch laden möchten, ohne eine benutzerdefinierte INF bereitstellen zu müssen.
Was ist ein WinUSB-Gerät?
Ein WinUSB-Gerät ist ein USB-Gerät (Universal Serial Bus), dessen Firmware bestimmte Featuredeskriptoren des Microsoft-Betriebssystems definiert, die die kompatible ID als "WINUSB" melden.
Der Zweck eines WinUSB-Geräts besteht darin, Windows zu ermöglichen, Winusb.sys als Funktionstreiber des Geräts ohne benutzerdefinierte INF-Datei zu laden. Für ein WinUSB-Gerät müssen Sie keine INF-Dateien für Ihr Gerät verteilen, sodass der Treiberinstallationsprozess für Endbenutzer einfach ist. Wenn Sie dagegen ein benutzerdefiniertes INF bereitstellen müssen, sollten Sie Ihr Gerät nicht als WinUSB-Gerät definieren und die Hardware-ID des Geräts im INF angeben.
Microsoft stellt Winusb.inf bereit, das Informationen enthält, die für die Installation von Winusb.sys als Gerätetreiber für ein USB-Gerät erforderlich sind.
Um Winusb.sys als Funktionstreiber zu laden, mussten Sie vor Windows 8 ein benutzerdefiniertes INF bereitstellen. Der benutzerdefinierte INF gibt die gerätespezifische Hardware-ID an und enthält auch Abschnitte aus der mitgelieferten Winusb.inf. Diese Abschnitte sind erforderlich, um den Dienst zu instanziieren, Posteingangsbinärdateien zu kopieren und eine GUID für die Geräteschnittstelle zu registrieren, die Anwendungen benötigen, um das Gerät zu finden und mit dem Gerät zu kommunizieren. Informationen zum Schreiben eines benutzerdefinierten INF finden Sie unter WinUSB (Winusb.sys) Installation.
In Windows 8 wurde die im Lieferumfang enthaltene Datei Winusb.inf aktualisiert, damit Windows die INF automatisch mit einem WinUSB-Gerät abgleichen kann.
WinUSB-Geräteinstallation mithilfe der mitgelieferten Winusb.inf
In Windows 8 wurde die im Lieferumfang enthaltene Datei Winusb.inf aktualisiert. Das INF enthält einen Installationsabschnitt, der auf eine kompatible ID namens "USB\MS_COMP_WINUSB" verweist.
[Generic.Section.NTamd64]
%USB\MS_COMP_WINUSB.DeviceDesc%=WINUSB,USB\MS_COMP_WINUSB
Das aktualisierte INF enthält auch eine neue Setupklasse namens "USBDevice".
Die Setupklasse "USBDevice" ist für geräte verfügbar, für die Microsoft keinen mitgelieferten Treiber bereitstellt. In der Regel gehören solche Geräte nicht zu klar definierten USB-Klassen wie Audio, Bluetooth usw. und erfordern einen benutzerdefinierten Treiber. Wenn es sich bei Ihrem Gerät um ein WinUSB-Gerät handelt, gehört das Gerät höchstwahrscheinlich nicht zu einer USB-Klasse. Daher muss Ihr Gerät unter der Setupklasse "USBDevice" installiert werden. Die aktualisierte Winusb.inf erleichtert diese Anforderung.
Informationen zur Verwendung der USBDevice-Klasse
Verwenden Sie nicht die Setupklasse "USB" für nicht klassifizierte Geräte. Diese Klasse ist für die Installation von Controllern, Hubs und zusammengesetzten Geräten reserviert. Die falsche Verwendung der "USB"-Klasse kann zu erheblichen Zuverlässigkeits- und Leistungsproblemen führen. Verwenden Sie für nicht klassifizierte Geräte "USBDevice".
Fügen Sie in Windows 8, um die Geräteklasse "USBDevice" zu verwenden, einfach dies ihrem INF hinzu:
[Version]
...
Class=USBDevice
ClassGuid={88BAE032-5A81-49f0-BC3D-A4FF138216D6}
...
In Geräte-Manager wird ein neuer Knoten USB Universal Serial Bus-Geräte angezeigt, und Ihr Gerät wird unter diesem Knoten angezeigt.
In Windows 7 müssen Sie zusätzlich zu den vorherigen Zeilen diese Registrierungseinstellungen im INF erstellen:
;---------- Add Registry Section ----------
[USBDeviceClassReg]
HKR,,,,"Universal Serial Bus devices"
HKR,,NoInstallClass,,1
HKR,,SilentInstall,,1
HKR,,IconPath,%REG_MULTI_SZ%,"%systemroot%\system32\setupapi.dll,-20"
In Geräte-Manager wird Ihr Gerät unter USB Universal Serial Bus-Geräte angezeigt. Die Geräteklassenbeschreibung wird jedoch von der Registrierungseinstellung abgeleitet, die in Ihrem INF angegeben ist.
Beachten Sie, dass die "USBDevice"-Klasse nicht auf WinUSB beschränkt ist. Wenn Sie über einen benutzerdefinierten Treiber für Ihr Gerät verfügen, können Sie die Setupklasse "USBDevice" in der benutzerdefinierten INF verwenden.
Während der Geräteenumeration liest der USB-Treiberstapel die kompatible ID vom Gerät. Wenn die kompatible ID "WINUSB" lautet, verwendet Windows sie als Gerätebezeichner und findet eine Übereinstimmung im aktualisierten Mitgelieferten Winusb.inf und lädt dann Winusb.sys als Funktionstreiber des Geräts.
Dieses Image ist für ein MUTT-Gerät mit einer einzelnen Schnittstelle, das als WinUSB-Gerät definiert ist und daher Winusb.sys als Funktionstreiber für das Gerät geladen wird.
Für Windows-Versionen vor Windows 8 ist die aktualisierte Winusb.inf über Windows Update verfügbar. Wenn Ihr Computer für das automatische Abrufen von Treiberupdates konfiguriert ist, wird der WinUSB-Treiber ohne Benutzereingriff mithilfe des neuen INF-Pakets installiert.
Ändern der Gerätebeschreibung für ein WinUSB-Gerät
Für ein WinUSB-Gerät zeigt Geräte-Manager "WinUsb-Gerät" als Gerätebeschreibung an. Diese Zeichenfolge wird von Winusb.inf abgeleitet. Wenn mehrere WinUSB-Geräte vorhanden sind, erhalten alle Geräte dieselbe Gerätebeschreibung.
Um das Gerät in Geräte-Manager eindeutig zu identifizieren und zu unterscheiden, stellt Windows 8 eine neue Eigenschaft für eine Geräteklasse bereit, die das System anweist, der vom Gerät (in seinem iProduct-Zeichenfolgendeskriptor) gemeldeten Gerätebeschreibung Vorrang vor der Beschreibung im INF zu geben. Die in Windows 8 definierte "USBDevice"-Klasse legt diese Eigenschaft fest. Anders ausgedrückt: Wenn ein Gerät unter der "USBDevice"-Klasse installiert wird, fragt das System das Gerät nach einer Gerätebeschreibung ab und legt die Geräte-Manager Zeichenfolge auf die in der Abfrage abgerufene Zeichenfolge fest. In diesem Fall wird die im INF angegebene Gerätebeschreibung ignoriert. Beachten Sie die Gerätebeschreibungszeichenfolgen: "MUTT" in der vorherigen Abbildung. Die Zeichenfolge wird vom USB-Gerät im Produktzeichenfolgendeskriptor bereitgestellt.
Die neue Klasseneigenschaft wird in früheren Versionen von Windows nicht unterstützt. Um eine angepasste Gerätebeschreibung für eine frühere Version von Windows zu erhalten, müssen Sie eine eigene benutzerdefinierte INF schreiben.
Konfigurieren eines WinUSB-Geräts
Um ein USB-Gerät als WinUSB-Gerät zu identifizieren, muss die Gerätefirmware über Microsoft-Betriebssystemdeskriptoren verfügen. Informationen zu den Deskriptoren finden Sie in den hier beschriebenen Spezifikationen: Microsoft-Betriebssystemdeskriptoren.
Unterstützung erweiterter Featuredeskriptoren
Damit der USB-Treiberstapel weiß, dass das Gerät erweiterte Funktionsdeskriptoren unterstützt, muss das Gerät einen Betriebssystemzeichenfolgendeskriptor definieren, der am Zeichenfolgenindex 0xEE gespeichert wird. Während der Enumeration fragt der Treiber den Zeichenfolgendeskriptor ab. Wenn der Deskriptor vorhanden ist, geht der Treiberstapel davon aus, dass das Gerät mindestens einen Betriebssystemfeaturedeskriptor und die Daten enthält, die zum Abrufen dieser Featuredeskriptoren erforderlich sind.
Der abgerufene Zeichenfolgendeskriptor verfügt über einen bMS_VendorCode Feldwert. Der Wert gibt den Anbietercode an, den der USB-Treiberstapel zum Abrufen des erweiterten Funktionsdeskriptors verwenden muss.
Informationen zum Definieren eines Betriebssystemzeichenfolgendeskriptors finden Sie unter "Der Betriebssystemzeichenfolgendeskriptor" in den hier beschriebenen Spezifikationen: Microsoft-Betriebssystemdeskriptoren.
Festlegen der kompatiblen ID
Ein erweiterter kompatibler ID-Betriebssystem-Funktionsdeskriptor, der erforderlich ist, um mit der mitgelieferten Winusb.inf-Datei zu übereinstimmen und das WinUSB-Treibermodul zu laden.
Der funktionsdeskriptor für erweiterte kompatible ID-Betriebssystem enthält einen Headerabschnitt gefolgt von einem oder mehreren Funktionsabschnitten, je nachdem, ob es sich bei dem Gerät um ein zusammengesetztes oder nicht zusammengesetztes Gerät handelt. Der Headerabschnitt gibt die Länge des gesamten Deskriptors, die Anzahl der Funktionsabschnitte und die Versionsnummer an. Bei einem nicht zusammengesetzten Gerät folgt auf den Header ein Funktionsabschnitt, der der einzigen Schnittstelle des Geräts zugeordnet ist. Das Feld compatibleID dieses Abschnitts muss "WINUSB" als Feldwert angeben. Für ein zusammengesetztes Gerät gibt es mehrere Funktionsabschnitte. Das Feld compatibleID jedes Funktionsabschnitts muss "WINUSB" angeben.
Registrieren einer Geräteschnittstellen-GUID
Ein erweiterter Eigenschaften-Betriebssystemfunktionsdeskriptor, der zum Registrieren der GUID der Geräteschnittstelle erforderlich ist. Die GUID ist erforderlich, um das Gerät über eine Anwendung oder einen Dienst zu finden, das Gerät zu konfigurieren und E/A-Vorgänge auszuführen.
In früheren Versionen von Windows erfolgt die GUID-Registrierung der Geräteschnittstelle über das benutzerdefinierte INF. Ab Windows 8 sollte Ihr Gerät die SCHNITTSTELLEN-GUID mithilfe erweiterter Eigenschaften des Betriebssystemfeaturedeskriptors melden.
Der Funktionsdeskriptor für erweiterte Eigenschaften enthält einen Headerabschnitt, auf den mindestens ein benutzerdefinierter Eigenschaftenabschnitt folgt. Der Headerabschnitt beschreibt den gesamten Deskriptor für erweiterte Eigenschaften, einschließlich seiner Gesamtlänge, der Versionsnummer und der Anzahl der benutzerdefinierten Eigenschaftenabschnitte. Um die GUID der Geräteschnittstelle zu registrieren, fügen Sie einen benutzerdefinierten Eigenschaftenabschnitt hinzu, in dem das Feld bPropertyName auf "DeviceInterfaceGUID" und wPropertyNameLength auf 40 Bytes festgelegt wird. Generieren Sie eine eindeutige Geräteschnittstellen-GUID mithilfe eines GUID-Generators, und legen Sie das Feld bPropertyData auf diese GUID fest, z. B. "{8FE6D4D7-49DD-41E7-9486-49AFC6BFE475}". Die GUID wird als Unicode-Zeichenfolge angegeben, und die Länge der Zeichenfolge beträgt 78 Bytes (einschließlich des NULL-Abschlusszeichens).
bPropertyData | 78 Bytes | 7B 00 38 00 46 00 45 00 36 00 44 00 34 00 44 00 37 00 2D 00 34 00 39 00 00 44 00 2D 00 34 00 31 00 45 00 37 00 2 00 39 00 34 00 38 00 36 00 2D 00 34 00 39 00 41 00 46 00 43 00 36 00 42 00 46 00 45 00 34 00 37 00 35 00 7D 00 00 00 | Der Eigenschaftswert ist {8FE6D4D7-49DD-41E7-9486-49AFC6BFE475}. |
Während der Geräteenumeration ruft der USB-Treiberstapel dann den DeviceInterfaceGUID-Wert aus dem Funktionsdeskriptor für erweiterte Eigenschaften ab und registriert das Gerät im Hardwareschlüssel des Geräts. Eine Anwendung kann den Wert mithilfe von SetupDiXxx-APIs abrufen (siehe SetupDiOpenDevRegKey). Weitere Informationen finden Sie unter Zugreifen auf ein USB-Gerät mithilfe von WinUSB-Funktionen.
Aktivieren oder Deaktivieren von WinUSB-Energieverwaltungsfeatures
Vor Windows 8 mussten Sie zum Konfigurieren der Energieverwaltungsfunktionen von WinUSB Registrierungseintragswerte in den HW schreiben. AddReg-Abschnitt Ihres benutzerdefinierten INF.
In Windows 8 und höher können Sie Energieeinstellungen auf dem Gerät angeben. Sie können Werte über den funktionsdeskriptor für erweiterte Eigenschaften melden, der Features in WinUSB für dieses Gerät aktiviert oder deaktiviert. Es gibt zwei Features, die konfiguriert werden können: selektives Anhalten und Systemreaktivierung. Das selektive Anhalten ermöglicht es dem Gerät, im Leerlauf in den Energiesparmodus zu wechseln. Systemreaktivierung bezieht sich auf die Fähigkeit eines Geräts, ein System zu reaktivieren, wenn sich das System im Energiesparmodus befindet.
Informationen zu den Energieverwaltungsfeatures von WinUSB finden Sie unter WinUSB-Energieverwaltung.
Eigenschaftenname | BESCHREIBUNG |
---|---|
DeviceIdleEnabled | Dieser Wert wird auf 1 festgelegt, um anzugeben, dass das Gerät im Leerlauf (selektives Anhalten) heruntergefahren werden kann. |
DefaultIdleState | Dieser Wert wird auf 1 festgelegt, um anzugeben, dass das Gerät standardmäßig im Leerlauf angehalten werden kann. |
DefaultIdleTimeout | Dieser Wert wird auf 5.000 in Millisekunden festgelegt, um anzugeben, wie lange in Millisekunden gewartet werden muss, bis sich ein Gerät im Leerlauf befindet. |
UserSetDeviceIdleEnabled | Dieser Wert ist auf 1 festgelegt, damit der Benutzer die Fähigkeit des Geräts zum Aktivieren oder Deaktivieren des selektiven Anhaltens von USB steuern kann. Ein Kontrollkästchen Zulassen, dass der Computer dieses Gerät ausschaltet, um stromsparend auf der Eigenschaftenseite der Energieverwaltung des Geräts zu speichern, und der Benutzer kann das Kontrollkästchen aktivieren oder deaktivieren, um das selektive Anhalten von USB zu aktivieren oder zu deaktivieren. |
SystemWakeEnabled | Dieser Wert wird auf 1 festgelegt, damit der Benutzer die Fähigkeit des Geräts steuern kann, das System aus einem Stromstand zu reaktivieren. Wenn diese Option aktiviert ist, wird das Kontrollkästchen Zulassen, dass dieses Gerät den Computer reaktiviert, auf der Eigenschaftenseite der Geräteenergieverwaltung angezeigt. Der Benutzer kann das Kontrollkästchen aktivieren oder deaktivieren, um die USB-Systemreaktivierung zu aktivieren oder zu deaktivieren. |
Um z. B. das selektive Anhalten auf dem Gerät zu aktivieren, fügen Sie einen Abschnitt für benutzerdefinierte Eigenschaften hinzu, der das Feld bPropertyName auf eine Unicode-Zeichenfolge, "DeviceIdleEnabled" und wPropertyNameLength auf 36 Bytes festlegt. Legen Sie das Feld bPropertyData auf "0x00000001" fest. Die Eigenschaftswerte werden als little-endian 32-Bit-Ganzzahlen gespeichert.
Während der Enumeration liest der USB-Treiberstapel die Funktionsdeskriptoren für erweiterte Eigenschaften und erstellt Registrierungseinträge unter diesem Schlüssel:
HKEY_LOCAL_MACHINE\System\Currentcontrolset\Enum\USB\<Geräteparameter für Gerätebezeichner>\<instanzbezeichner>\
Diese Abbildung zeigt Beispieleinstellungen für ein WinUSB-Gerät.
Weitere Beispiele finden Sie in den Spezifikationen für Microsoft-Betriebssystemdeskriptoren.