Freigeben über


WinUSB-Gerät

In diesem Artikel wird beschrieben, wie Windows ein WinUSB-Gerät erkennt. Hersteller und unabhängige Hardwareanbieter (IHV) können die Informationen in diesem Artikel verwenden, um ein Gerät zu entwickeln, das Winusb.sys als Funktionstreiber verwendet. In diesem Artikel wird erläutert, wie Der Treiber automatisch geladen wird, ohne eine benutzerdefinierte Informationsdatei (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 als kompatible ID melden WINUSB .

Der Zweck eines WinUSB-Geräts besteht darin, Windows zu ermöglichen, Winusb.sys als Funktionstreiber des Geräts ohne eine benutzerdefinierte INF-Datei zu laden. Für ein WinUSB-Gerät müssen Sie KEINE INF-Dateien für Ihr Gerät verteilen, wodurch 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 in der INF angeben.

Microsoft stellt eine Winusb.inf-Datei bereit, die Informationen enthält, die zum Installieren von Winusb.sys als Gerätetreiber für ein USB-Gerät erforderlich sind.

Vor Windows 8 mussten Sie, um Winusb.sys als Funktionstreiber zu laden, eine benutzerdefinierte INF bereitstellen. Die benutzerdefinierte INF gibt die gerätespezifische Hardware-ID an und enthält auch Abschnitte aus der Box Winusb.inf. Diese Abschnitte sind erforderlich, um den Dienst zu instanziieren, Posteingangsbinärdateien zu kopieren und eine Geräteschnittstellen-GUID zu registrieren, die Anwendungen benötigen, um das Gerät zu finden und mit ihm zu kommunizieren. Weitere Informationen finden Sie unter Schreiben einer benutzerdefinierten INF für WinUSB-Installation.

In Windows 8 wird die In-Box-Datei "Winusb.inf" aktualisiert, damit Windows die INF automatisch mit einem WinUSB-Gerät abgleichen kann.

WinUSB-Geräteinstallation mithilfe der In-Box Winusb.inf

In Windows 8 wird die In-Box-Datei "Winusb.inf" aktualisiert. Der 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

Die aktualisierte INF enthält auch eine neue Setupklasse namens USBDevice.

Die USBDevice-Setupklasse ist für diese Geräte verfügbar, für die Microsoft keinen mitgelieferten Treiber bereitstellt. In der Regel gehören solche Geräte nicht zu gut definierten USB-Klassen, z. B. Audio oder Bluetooth, 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. Ihr Gerät muss unter der USBDevice-Setupklasse installiert sein. Die aktualisierte Winusb.inf erleichtert diese Anforderung.

Informationen zur Verwendung der USBDevice-Klasse

Verwenden Sie die USB-Setupklasse nicht für nicht klassifizierte Geräte. Diese Klasse ist für die Installation von Controllern, Hubs und zusammengesetzten Geräten reserviert. Das Fehlverwenden der USB-Klasse kann zu erheblichen Zuverlässigkeits- und Leistungsproblemen führen. Verwenden Sie USBDevice für nicht klassifizierte Geräte.

Fügen Sie in Windows 8 diese Definition ihrer INF-Datei hinzu, um die USBDevice-Geräteklasse zu verwenden:

  [Version]
  ...
  Class=USBDevice
  ClassGuid={88BAE032-5A81-49f0-BC3D-A4FF138216D6}
  ...

Sehen Sie sich im Geräte-Manager einen neuen Knoten namens USB Universal Serial Bus-Geräte an. Ihr Gerät wird unter diesem Knoten angezeigt.

In Windows 7 müssen Sie zusätzlich zu den vorherigen Zeilen diese Registrierungseinstellungen in der 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"

Im Geräte-Manager wird Ihr Gerät unter USB Universal Serial Bus-Geräten angezeigt. Die Geräteklassenbeschreibung wird von der Registrierungseinstellung abgeleitet, die in Ihrem INF angegeben ist.

Die USBDevice-Klasse ist nicht auf WinUSB beschränkt. Wenn Sie über einen benutzerdefinierten Treiber für Ihr Gerät verfügen, können Sie die USBDevice-Setupklasse in der benutzerdefinierten INF verwenden.

Während der Geräteaufzählung liest der USB-Treiberstapel die kompatible ID vom Gerät aus. Wenn WINUSB es sich um die kompatible ID handelt, verwendet Windows sie als Gerätebezeichner und findet eine Übereinstimmung in der aktualisierten In-Box Winusb.inf und lädt dann Winusb.sys als Funktionstreiber des Geräts.

Dieses Bild zeigt ein Microsoft USB Test Tool (MUTT)-Gerät mit einer einzelnen Schnittstelle, das als WinUSB-Gerät definiert ist, sodass Winusb.sys als Funktionstreiber für das Gerät geladen wird.

Screenshot des Windows-Geräte-Managers mit einem WinUSB-Gerät.

Für Versionen von Windows vor Windows 8 ist das aktualisierte Winusb.inf über Windows Update verfügbar. Wenn Ihr Computer so konfiguriert ist, dass das Treiberupdate automatisch abgerufen wird, wird der WinUSB-Treiber ohne Benutzereingriff mithilfe des neuen INF-Pakets installiert.

So ändern Sie die Gerätebeschreibung für ein WinUSB-Gerät

Für ein WinUSB-Gerät zeigt der Geräte-Manager WinUsb Device 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 im Geräte-Manager eindeutig zu identifizieren und zu unterscheiden, stellt Windows 8 eine neue Eigenschaft für eine Geräteklasse bereit. Die Eigenschaft weist das System an, der Gerätebeschreibung Vorrang zu geben, die vom Gerät in der iProduct-Zeichenfolgenbeschreibung über die Beschreibung in der INF angegeben ist. Die in Windows 8 definierte USBDevice-Klasse legt diese Eigenschaft fest.

Wenn ein Gerät unter der USBDevice-Klasse installiert ist, fragt Windows das Gerät nach einer Gerätebeschreibung ab und legt die Device Manager-Zeichenfolge auf die in der Abfrage abgerufene Zeichenfolge fest. In diesem Fall wird die in der INF angegebene Gerätebeschreibung ignoriert. Beachten Sie die Gerätebeschreibungszeichenfolgen: MUTT im vorherigen Bild. Das USB-Gerät stellt die Zeichenfolge in seinem Produktzeichenfolgen-Deskriptor bereit.

Die neue Klasseneigenschaft wird in früheren Versionen von Windows nicht unterstützt. Um eine angepasste Gerätebeschreibung in einer früheren Version von Windows zu haben, müssen Sie eine eigene benutzerdefinierte INF erstellen.

Konfigurieren eines WinUSB-Geräts

Um ein USB-Gerät als WinUSB-Gerät zu identifizieren, muss die Gerätefirmware über Microsoft OS-Deskriptoren verfügen. Weitere Informationen finden Sie unter Microsoft OS-Deskriptoren für USB-Geräte.

Unterstützen erweiterter Featuredeskriptoren

Damit der USB-Treiberstapel weiß, dass das Gerät erweiterte Featuredeskriptoren unterstützt, muss das Gerät einen unter Zeichenfolgenindex 0xEEgespeicherten Betriebssystemzeichenfolgendeskriptor definieren. Den Zeichenfolgendeskriptor fragt der Treiber-Stack während der Enumeration ab. Wenn der Deskriptor vorhanden ist, geht der Treiberstapel davon aus, dass das Gerät einen oder mehrere Betriebssystemfeaturedeskriptoren und die Daten enthält, die zum Abrufen dieser Featuredeskriptoren erforderlich sind.

Der abgerufene Zeichenfolgendeskriptor weist einen bMS_VendorCode Feldwert auf. Der Wert gibt den Anbietercode an, den der USB-Treiberstapel zum Abrufen des erweiterten Featuredeskriptors verwenden muss.

Informationen zum Definieren eines Betriebssystemzeichenfolgendeskriptors finden Sie unter Microsoft OS-Deskriptoren für USB-Geräte.

Festlegen der kompatiblen ID

Ein erweiterter kompatibler ID-Betriebssystem-Feature-Deskriptor ist erforderlich, um mit der in Box enthaltenen Winusb.inf abzugleichen und das WinUSB-Treibermodul zu laden.

Der erweiterte kompatible ID-Featuredeskriptor enthält einen Headerabschnitt gefolgt von einem oder mehreren Funktionsabschnitten, je nachdem, ob das Gerät zusammengesetzt oder nicht komposiert ist. Der Kopfzeilenabschnitt gibt die Länge des gesamten Deskriptors, die Anzahl der Funktionsabschnitte und die Versionsnummer an.

Für ein nicht kompositees Gerät folgt der Header einem Funktionsabschnitt, der der einzigen Schnittstelle des Geräts zugeordnet ist. Das kompatibleID-Feld dieses Abschnitts muss als Feldwert angegeben WINUSB werden. Für ein zusammengesetztes Gerät gibt es mehrere Funktionsabschnitte. Das kompatibleID-Feld jedes Funktionsabschnitts muss WINUSB angegeben werden.

Registrieren einer Geräteschnittstellen-GUID

Für die Registrierung der GUID der Geräteschnittstelle ist ein erweiterter Eigenschaftenbeschreiber erforderlich. Die GUID ist erforderlich, um das Gerät aus einer Anwendung oder einem 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 Featuredeskriptor für erweiterte Eigenschaften enthält einen Headerabschnitt, auf den mindestens ein benutzerdefinierter Eigenschaftenabschnitt folgt. Der Kopfzeilenabschnitt beschreibt den gesamten deskriptor für erweiterte Eigenschaften, einschließlich der 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, der das Feld bPropertyName auf DeviceInterfaceGUID und wPropertyNameLength auf 40 Byte festlegt.

Generieren Sie eine eindeutige Geräteschnittstellen-GUID mithilfe eines GUID-Generators und legen Sie das bPropertyData-Feld auf diese GUID fest, wie {8FE6D4D7-49DD-41E7-9486-49AFC6BFE475}. Die GUID wird als Unicode-Zeichenfolge angegeben, und die Länge der Zeichenfolge beträgt 78 Byte, einschließlich des Null-Terminators.

       
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 2D 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 erweiterten Funktionsdeskriptor des Betriebssystems 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 war es erforderlich, um die Energieverwaltungsfunktionen von WinUSB zu konfigurieren, die Registrierungseintragswerte im Abschnitt HW.AddReg Ihrer benutzerdefinierten INF einzutragen.

In Windows 8 und höher können Sie Energieeinstellungen auf dem Gerät angeben. Sie können Werte über den erweiterten Funktionsdeskriptor des Betriebssystems melden, der Features in WinUSB für dieses Gerät aktiviert oder deaktiviert. Es gibt zwei Features, die Sie konfigurieren können: selektives Anhalten und Systemaufwecken. Das selektive Anhalten ermöglicht es dem Gerät, den Energiesparmodus einzugeben, wenn es sich im Leerlauf befindet. Das Aufwecken des Systems bezieht sich auf die Fähigkeit eines Geräts, ein System zu reaktivieren, wenn sich das System in einem Niedrigenergiezustand befindet.

Weitere Informationen finden Sie unter WinUSB Power Management.

Eigenschaftsname BESCHREIBUNG
DeviceIdleEnabled Dieser Wert ist auf 1 festgelegt, um anzugeben, dass das Gerät beim Leerlauf (selektives Anhalten) herunterschalten kann.
DefaultIdleState Dieser Wert ist auf 1 festgelegt, um anzugeben, dass das Gerät standardmäßig im Leerlauf angehalten werden kann.
DefaultIdleTimeout Dieser Wert wird auf 5000 in Millisekunden festgelegt, um die Zeitspanne in Millisekunden anzugeben, die gewartet werden soll, bevor ermittelt wird, dass ein Gerät im Leerlauf ist.
UserSetDeviceIdleEnabled Dieser Wert ist auf 1 festgelegt, um dem Benutzer zu ermöglichen, die Fähigkeit des Geräts zu steuern, USB selektives Anhalten zu aktivieren oder zu deaktivieren. Es gibt ein Kontrollkästchen „Dem Computer erlauben, dieses Gerät auszuschalten, um Energie zu sparen“ auf der Power Management-Eigenschaftsseite des Geräts. Benutzer können den selektiven USB-Standby aktivieren oder deaktivieren.
SystemWakeEnabled Dieser Wert ist auf 1 festgelegt, damit der Benutzer die Fähigkeit des Geräts steuern kann, das System aus einem Energiesparzustand zu reaktivieren. Wenn diese Option aktiviert ist, wird das Kontrollkästchen "Computer aktivieren" auf der Power Management-Eigenschaftenseite des Geräts angezeigt. Der Benutzer kann die USB-Systemaufweckung aktivieren oder deaktivieren.

Um beispielsweise das selektive Anhalten auf dem Gerät zu aktivieren, fügen Sie einen benutzerdefinierten Eigenschaftenabschnitt hinzu, der das Feld "bPropertyName " auf eine Unicode-Zeichenfolge DeviceIdleEnabled und "wPropertyNameLength " auf 36 Byte festlegt. Legen Sie das bPropertyData-Feld auf 0x00000001. Die Eigenschaftswerte werden als Little-Endian 32-Bit-Ganzzahlen gespeichert.

Während der Aufzählung liest der USB-Treiberstapel die erweiterten Eigenschafts-Feature-Deskriptoren und erstellt Registrierungseinträge unter diesem Schlüssel:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Enum\USB\<Gerätekennung>\<Instanzkennung>\Geräteparameter

Diese Abbildung zeigt Beispieleinstellungen für ein WinUSB-Gerät.

Screenshot des Windows-Registrierungs-Editors mit Einstellungen für ein WinUSB-Gerät.

Weitere Beispiele finden Sie unter Microsoft OS-Beschreibungen.