Serieller USB-Treiber (Usbser.sys)
Wichtig
Dieses Thema ist für Entwickler*innen gedacht. Wenn Sie ein Kunde sind, der Probleme mit dem USB-Anschluss hat, lesen Sie bitte USB-C-Probleme in Windows beheben.
Verwenden Sie den von Microsoft bereitgestellten USB-Treiber (Usbser.sys) für Ihr Kommunikations- und CDC-Steuergerät. Microsoft empfiehlt, wann immer möglich, die in Windows enthaltenen Treiber zu verwenden.
Unterstützte Versionen
- Windows 11
- Windows 10
Gilt für:
- Gerätehersteller von CDC-Kontrollgeräten
In Windows 10 wurde der Treiber unter Verwendung des Kernel-Mode Driver Framework neu geschrieben, was die allgemeine Stabilität des Treibers verbessert.
- Verbessertes Plug & Play und Energiemanagement durch den Treiber.
- Zusätzliche Energieverwaltungsfunktionen wie USB Selektives Aussetzen.
Außerdem können UWP-Anwendungen jetzt die APIs nutzen, die vom Windows.Devices.SerialCommunication-Namenspace bereitgestellt werden und die es Anwendungen ermöglichen, mit diesen Geräten zu kommunizieren.
Usbser.sys-Installation
Laden Sie den von Microsoft bereitgestellten Inbox-Treiber (Usbser.sys) für Ihr Kommunikations- und CDC-Steuergerät.
Hinweis
Wenn Sie versuchen, einen in Windows enthaltenen USB-Gerätetreiber zu installieren, müssen Sie den Treiber nicht herunterladen. Sie werden automatisch installiert. Wenn sie nicht automatisch installiert werden, wenden Sie sich an den Gerätehersteller. Eine Liste der in Windows enthaltenen USB-Geräteklassentreiber finden Sie unter In Windows enthaltene USB-Geräteklassentreiber.
Ab Windows 10 wurde Usbser.inf zum Verzeichnis %Systemroot%\INF hinzugefügt, wodurch Usbser.sys als funktionales Geräteobjekt (FDO) in den Gerätestapel geladen wird. Wenn Ihr Gerät zur Klasse der Kommunikations- und CDC-Steuergeräte gehört, wird Usbser.sys automatisch geladen. Sie müssen keine eigene INF schreiben, um den Treiber zu referenzieren. Der Treiber wird auf der Grundlage einer kompatiblen ID-Übereinstimmung geladen, ähnlich wie andere in Windows enthaltene USB-Gerätetreiber.
USB\Class_02
USB\Class_02&SubClass_02
Wenn Sie Usbser.sys automatisch laden möchten, setzen Sie den Klassencode auf 02 und den Subklassencode auf 02 im Device Descriptor. Bei diesem Ansatz brauchen Sie keine INF-Dateien für Ihr Gerät zu verteilen, da das System die Datei Usbser.inf verwendet. Für weitere Informationen, siehe Klassendefinitionen für Kommunikationsgeräte 1.2.
Wenn Ihr Gerät den Klassencode 02, aber einen anderen Subklassencode-Wert als 02 angibt, wird Usbser.sys nicht automatisch geladen. Der Plug & Play-Manager versucht, einen Treiber zu suchen. Wenn kein passender Treiber gefunden wird, ist für das Gerät möglicherweise kein Treiber geladen. Möglicherweise müssen Sie Ihren eigenen Treiber laden oder eine INF schreiben, die auf einen anderen Inbox-Treiber verweist.
Wenn Ihr Gerät Klassen- und Subklassencodes bis 02 angibt und Sie einen anderen Treiber anstelle von Usbser.sys laden möchten, müssen Sie eine INF schreiben, die die Hardware-ID des Geräts und den zu installierenden Treiber angibt. Sehen Sie sich die INF-Dateien an, die den Beispieltreibern beiliegen, und suchen Sie nach Geräten, die Ihrem Gerät ähneln. Informationen über INF-Abschnitte finden Sie unter Übersicht über INF-Dateien.
Konfiguration die selektive Aussetzung für Usbser.sys
Ab Windows 10 unterstützt Usbser.sys USB Selektives Aussetzen. Damit kann das angeschlossene serielle USB-Gerät in einen stromsparenden Zustand versetzt werden, wenn es nicht benutzt wird, während das System im S0-Zustand bleibt. Wenn die Kommunikation mit dem Gerät wieder aufgenommen wird, kann das Gerät den Aussetzungszustand verlassen und den Arbeitszustand wieder aufnehmen. Die Funktion ist standardmäßig deaktiviert und kann durch Setzen des Eintrags IdleUsbSelectiveSuspendPolicy unter diesem Registrierungsschlüssel aktiviert und konfiguriert werden:
HKEY\LOCAL\MACHINE\SYSTEM\CurrentControlSet\Enum\USB\<hardware id>\<instance id>\Device Parameters
Um die Energieverwaltungsfunktionen von Usbser.sys zu konfigurieren, setzen Sie IdleUsbSelectiveSuspendPolicy auf:
„0x00000001“: Versetzt das Gerät in den selektiven Aussetzungs-Modus, wenn es sich im Leerlauf befindet, d. h. wenn keine aktiven Datenübertragungen zum oder vom Gerät stattfinden.
„0x00000000“: Wechselt nur dann in den selektiven Aussetzungs-Modus, wenn es keine offenen Handles auf dem Gerät gibt.
Dieser Eintrag kann auf eine von zwei Arten hinzugefügt werden:
Schreiben Sie eine INF, die auf die Installations-INF verweist, und fügen Sie den Registrierungseintrag im Abschnitt HW.AddReg hinzu.
Beschreiben Sie den Registrierungseintrag in einem erweiterten Eigenschaften-OS-Feature-Deskriptor. Fügen Sie einen Abschnitt für benutzerdefinierte Eigenschaften hinzu, der das Feld bPropertyName auf die Unicode-Zeichenfolge „IdleUsbSelectiveSuspendPolicy“ und wPropertyNameLength auf 62 Bytes setzt. Setzen Sie das Feld bPropertyData auf „0x00000001“ oder „0x00000000“. Die Eigenschaftswerte werden als Little-Endian-32-Bit-Ganzzahlen gespeichert.
Weitere Informationen finden Sie unter Microsoft OS Deskriptoren.
Entwicklung von Windows-Anwendungen für ein USB CDC-Gerät
Ab Windows 10 kann eine Windows-Anwendung Anforderungen an Usbser.sys senden, indem sie den Namespace Windows.Devices.SerialCommunication verwendet. Es definiert Windows Runtime-Klassen, die zur Kommunikation mit einem USB CDC-Gerät über einen seriellen Anschluss oder eine Abstraktion eines seriellen Anschlusses verwendet werden können. Die Klassen bieten Funktionen, um ein solches serielles Gerät zu erkennen, Daten zu lesen und zu schreiben und serienspezifische Eigenschaften für die Flusskontrolle zu steuern, wie z. B. die Einstellung der Baud-Rate und der Signalzustände.