WinUSB (Winusb.sys)-Installation für Entwickler*innen

Bei bestimmten USB-Geräten (Universal Serial Bus) können Sie WinUSB (Winusb.sys) installieren, anstatt einen Treiber zu implementieren.

Wichtig

Dieses Thema ist für Entwickler*innen gedacht. Wenn ein Kunde USB-Probleme hat, lesen Sie "Beheben von USB-C-Problemen in Windows".

Automatische Installation von WinUSB ohne INF-Datei

Als OEM oder unabhängiger Anbieter von Hardware (IHV) können Sie Ihr Gerät so gestalten, dass die Winusb.sys automatisch auf Windows 8 und späteren Versionen des Betriebssystems installiert wird. Ein solches Gerät wird als WinUSB-Gerät bezeichnet und erfordert nicht, dass Sie eine benutzerdefinierte INF-Datei schreiben, die auf "Winusb.inf" verweist.

Wenn Sie ein WinUSB-Gerät anschließen, liest das System die Geräteinformationen und lädt Winusb.sys automatisch.

Weitere Informationen finden Sie unter WinUSB-Gerät.

Installieren von WinUSB durch Angabe der vom System bereitgestellten Geräteklasse

Wenn Sie Ihr Gerät verbinden, stellen Sie möglicherweise fest, dass Windows Winusb.sys automatisch lädt. Führen Sie andernfalls die folgenden Anweisungen aus, um den Treiber zu laden:

  1. Schließen Sie Ihr Gerät an das Host-System an.
  2. Öffnen Sie Geräte-Manager, und suchen Sie das Gerät.
  3. Wählen und halten Sie das Gerät (oder klicken Sie mit der rechten Maustaste darauf), und wählen Sie Treibersoftware aktualisieren ... aus dem Kontextmenü.
  4. Wählen Sie im Assistenten Auf meinem Computer nach Treibersoftware suchen.
  5. Wählen Sie Aus einer Liste von Gerätetreibern auf meinem Computer auswählen.
  6. Wählen Sie in der Liste der Geräteklassen Universal-Serial-Bus-Geräte.
  7. Der Assistent zeigt WinUsb-Gerät an. Wählen Sie es aus, um den Treiber zu laden.

Wenn universelle serielle Busgeräte nicht in der Liste der Geräteklassen angezeigt werden, müssen Sie den Treiber mithilfe eines benutzerdefinierten INF installieren. Im vorherigen Verfahren wird keine Geräteschnittstellen-GUID für eine App (UWP-App oder Windows-Desktop-App) für den Zugriff auf das Gerät hinzugefügt. Sie müssen die GUID manuell hinzufügen, indem Sie dieses Verfahren befolgen.

  1. Laden Sie den Treiber wie in der vorangegangenen Prozedur beschrieben.

  2. Erstellen Sie eine Geräteschnittstellen-GUID für Ihr Gerät mit einem Tool wie guidgen.exe.

  3. Suchen Sie den Registrierungsschlüssel für das Gerät unter diesem Schlüssel:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\<VID_vvvv&PID_pppp>

  4. Fügen Sie unter dem Schlüssel Device Parameters einen Registrierungseintrag mit der Zeichenfolge DeviceInterfaceGUID oder einen Multi-String-Eintrag mit der Bezeichnung DeviceInterfaceGUIDs hinzu. Legen Sie den Wert auf die GUID fest, die Sie in Schritt 2 erstellt haben.

  5. Trennen Sie das Gerät vom System, und schließen Sie es wieder an denselben physischen Port an.

    Hinweis

    Wenn Sie den physischen Port ändern, müssen Sie die Schritte 1 bis 4 wiederholen.

Schreiben einer angepassten INF für die WinUSB-Installation

Als Teil des Treiberpakets stellen Sie eine INF-Datei bereit, die Winusb.sys als Funktionstreiber für das USB-Gerät installiert.

Die folgende Beispiel-INF-Datei zeigt die WinUSB-Installation für die meisten USB-Geräte mit einigen Modifikationen, wie z. B. dem Ändern von USB_Install in den Abschnittsnamen in einen entsprechenden DDInstall-Wert. Sie sollten auch die Abschnitte Version, Manufacturer und Model nach Bedarf ändern. Geben Sie z. B. einen geeigneten Herstellernamen, den Namen Ihrer signierten Katalogdatei, die richtige Geräteklasse sowie die Anbieterkennung (VID) und die Produktkennung (PID) für das Gerät an. Weitere Informationen zum Erstellen einer Katalogdatei finden Sie unter Erstellen einer Katalogdatei für die Testsignierung eines Treiberpakets.

Beachten Sie außerdem, dass die Setupklasse auf USBDevice festgelegt ist. Anbieter können die USBDevice-Setupklasse für Geräte verwenden, die nicht zu einer anderen Klasse gehören und keine USB-Hostcontroller oder Hubs sind.

Wenn Sie WinUSB als Funktionstreiber für eine der Funktionen in einem USB-Verbundgerät installieren, müssen Sie die Hardware-ID angeben, die der Funktion zugeordnet ist, in der INF. Sie können die Hardware-ID für die Funktion über die Eigenschaften des Devnode im Geräte-Manager abrufen. Das Hardware-ID-Zeichenfolgenformat ist USB\VID_vvvv&PID_pppp.

Die folgende INF installiert WinUSB als Funktionstreiber der OSR USB FX2-Karte auf einem x64-basierten System.

Ab Windows 10, Version 1709, stellt das Windows Driver Kit InfVerif.exe zur Verfügung, mit dem Sie eine Treiber-INF-Datei testen können, um sicherzustellen, dass es keine Syntaxprobleme gibt und die INF-Datei universell ist. Wir empfehlen, dass Sie eine universelle INF-Datei bereitstellen. Weitere Informationen finden Sie unter Verwenden einer universellen INF-Datei.

;
;
; Installs WinUsb
;

[Version]
Signature   = "$Windows NT$"
Class       = USBDevice
ClassGUID   = {88BAE032-5A81-49f0-BC3D-A4FF138216D6}
Provider    = %ManufacturerName%
CatalogFile = WinUSBInstallation.cat
DriverVer   = 09/04/2012,13.54.20.543
PnpLockdown = 1

; ========== Manufacturer/Models sections ===========

[Manufacturer]
%ManufacturerName% = Standard,NTamd64

[Standard.NTamd64]
%DeviceName% =USB_Install, USB\VID_0547&PID_1002

; ========== Class definition (for Windows 8 and earlier versions)===========

[ClassInstall32]
AddReg = ClassInstall_AddReg

[ClassInstall_AddReg]
HKR,,,,%ClassName%
HKR,,NoInstallClass,,1
HKR,,IconPath,%REG_MULTI_SZ%,"%systemroot%\system32\setupapi.dll,-20"
HKR,,LowerLogoVersion,,5.2

; =================== Installation ===================

[USB_Install]
Include = winusb.inf
Needs   = WINUSB.NT

[USB_Install.Services]
Include =winusb.inf
Needs   = WINUSB.NT.Services

[USB_Install.HW]
AddReg=Dev_AddReg

[USB_Install.Wdf]
KmdfService=WINUSB, WinUsb_Install

[WinUsb_Install]
KmdfLibraryVersion=1.11

[Dev_AddReg]
HKR,,DeviceInterfaceGUIDs,0x10000,"{9f543223-cede-4fa3-b376-a25ce9a30e74}"

; [DestinationDirs]
; If your INF needs to copy files, you must not use the DefaultDestDir directive here.
; You must explicitly reference all file-list-section names in this section.

; =================== Strings ===================

[Strings]
ManufacturerName=""
ClassName="Universal Serial Bus devices"
DeviceName="Fx2 Learning Kit Device"
REG_MULTI_SZ = 0x00010000

Um nur eine neue benutzerdefinierte Geräteeinrichtungsklasse zu installieren, schließen Sie einen ClassInstall32-Abschnitt in eine INF-Datei des Geräts ein. INF-Dateien für Geräte in einer installierten Klasse, unabhängig davon, ob es sich um eine vom System bereitgestellte Geräteeinrichtungsklasse oder eine angepasste Klasse handelt, dürfen keinen ClassInstall32-Abschnitt enthalten.

Mit Ausnahme der gerätespezifischen Werte und einiger Probleme, die in der folgenden Liste aufgeführt sind, können Sie diese Abschnitte und Richtlinien verwenden, um WinUSB für jedes USB-Gerät zu installieren. Diese Listenelemente beschreiben die Includes und Directives in der vorangehenden INF-Datei.

  • USB_Install: Die Richtlinien Include und Needs im Abschnitt USB_Install sind für die Installation von WinUSB erforderlich. Sie sollten diese Direktiven nicht ändern.

  • USB_Install.Services: Die Richtlinie Include im Abschnitt USB_Install.Services enthält die vom System bereitgestellte INF für WinUSB (Winusb.inf). Der WinUSB-Coinstaller installiert diese INF-Datei, wenn sie noch nicht auf dem Zielsystem installiert ist. Die Richtlinie Needs gibt den Abschnitt in Winusb.inf an, der Informationen enthält, die für die Installation von Winusb.sys als Funktionstreiber des Geräts erforderlich sind. Sie sollten diese Direktiven nicht ändern.

  • USB_Install.HW: Dieser Abschnitt ist der Schlüssel in der INF-Datei. Er gibt den global eindeutigen Bezeichner (GUID) der Geräteschnittstelle für Ihr Gerät an. Die Richtlinie AddReg legt die angegebene Schnittstellen-GUID in einem Standardwert der Registrierung fest. Wenn Winusb.sys als Funktionstreiber des Geräts geladen wird, liest es den Registrierungswert DeviceInterfaceGUIDs Schlüssel und verwendet die angegebene GUID, um die Geräteschnittstelle darzustellen. Sie sollten die GUID in diesem Beispiel durch eine GUID ersetzen, die Sie speziell für Ihr Gerät erstellen. Wenn sich die Protokolle für das Gerät ändern, erstellen Sie eine neue Geräteschnittstellen-GUID.

    Hinweis

    Benutzermodussoftware muss SetupDiGetClassDevs aufrufen, um die registrierten Geräteschnittstellen aufzählen zu können, die einer der geräteschnittstellenklassen zugeordnet sind, die unter dem Schlüssel "DeviceInterfaceGUIDs" angegeben sind. SetupDiGetClassDevs gibt das Geräte-Handle für das Gerät zurück, das die Benutzermodus-Software dann an die WinUsb_Initialize-Routine übergeben muss, um ein WinUSB-Handle für die Geräteschnittstelle abzurufen. Weitere Informationen zu diesen Routinen finden Sie unter Zugriff auf ein USB-Gerät mit Hilfe von WinUSB-Funktionen.

Die folgende INF installiert WinUSB als Funktionstreiber der OSR USB FX2-Karte auf einem x64-basierten System. Das Beispiel zeigt INF mit WDF-Coinstallern.

;
;
; Installs WinUsb
;

[Version]
Signature   = "$Windows NT$"
Class       = USBDevice
ClassGUID   = {88BAE032-5A81-49f0-BC3D-A4FF138216D6}
Provider    = %ManufacturerName%
CatalogFile = WinUSBInstallation.cat
DriverVer   = 09/04/2012,13.54.20.543
PnpLockdown = 1

; ========== Manufacturer/Models sections ===========

[Manufacturer]
%ManufacturerName% = Standard,NTamd64

[Standard.NTamd64]
%DeviceName% =USB_Install, USB\VID_0547&PID_1002

; ========== Class definition (for Windows 8 and earlier versions) ===========

[ClassInstall32]
AddReg = ClassInstall_AddReg

[ClassInstall_AddReg]
HKR,,,,%ClassName%
HKR,,NoInstallClass,,1
HKR,,IconPath,%REG_MULTI_SZ%,"%systemroot%\system32\setupapi.dll,-20"
HKR,,LowerLogoVersion,,5.2

; =================== Installation ===================

[USB_Install]
Include = winusb.inf
Needs   = WINUSB.NT

[USB_Install.Services]
Include =winusb.inf
Needs   = WINUSB.NT.Services

[USB_Install.HW]
AddReg=Dev_AddReg

[Dev_AddReg]
HKR,,DeviceInterfaceGUIDs,0x10000,"{9f543223-cede-4fa3-b376-a25ce9a30e74}"

[USB_Install.CoInstallers]
AddReg=CoInstallers_AddReg
CopyFiles=CoInstallers_CopyFiles

[CoInstallers_AddReg]
HKR,,CoInstallers32,0x00010000,"WdfCoInstaller01011.dll,WdfCoInstaller","WinUsbCoInstaller2.dll"

[CoInstallers_CopyFiles]
WinUsbCoInstaller2.dll
WdfCoInstaller01011.dll

[DestinationDirs]
; If your INF needs to copy files, you must not use the DefaultDestDir directive here.
CoInstallers_CopyFiles=11
; ================= Source Media Section =====================

[SourceDisksNames]
1 = %DiskName%

[SourceDisksFiles]
WinUsbCoInstaller2.dll=1
WdfCoInstaller01011.dll=1


; =================== Strings ===================

[Strings]
ManufacturerName=""
ClassName="Universal Serial Bus devices"
DeviceName="Fx2 Learning Kit Device"
DiskName="MyDisk"
REG_MULTI_SZ = 0x00010000
  • USB_Install.CoInstallers: Dieser Abschnitt, der die Abschnitte "AddReg " und "CopyFiles " enthält, enthält Daten und Anweisungen zum Installieren der WinUSB- und KMDF-Coinstaller und zuordnen sie dem Gerät. Die meisten USB-Geräte können diese Abschnitte und Richtlinien ohne Änderungen verwenden.

  • Die x86-basierten und x64-basierten Versionen von Windows verfügen über separate Coinstaller.

    Jeder Coinstaller verfügt über kostenlose und überprüfte Versionen. Verwenden Sie die kostenlose Version, um WinUSB auf kostenlosen Builds von Windows zu installieren, einschließlich aller Retail-Versionen. Um WinUSB auf überprüften Builds von Windows zu installieren, verwenden Sie die überprüfte Version (mit dem Suffix "_chk").

Jedes Mal, wenn Winusb.sys geladen wird, registriert es eine Geräteschnittstelle mit den Geräteschnittstellenklassen, die in der Registrierung unter dem Schlüssel DeviceInterfaceGUIDs angegeben sind.

HKR,,DeviceInterfaceGUIDs, 0x10000,"{D696BFEB-1734-417d-8A04-86D01071C512}"

Wenn Sie das weiterverteilbare WinUSB-Paket für Windows XP oder Windows Server 2003 verwenden, stellen Sie sicher, dass Sie WinUSB nicht in Ihren Deinstallationspaketen deinstallieren. Andere USB-Geräte könnten WinUSB verwenden, daher müssen seine Binärdateien im gemeinsamen Ordner verbleiben.

So erstellen Sie ein Treiberpaket, das Winusb.sys installiert

Um WinUSB als Funktionstreiber des Geräts zu verwenden, erstellen Sie ein Treiberpaket. Das Treiberpaket muss diese Dateien enthalten:

  • WinUSB Coinstaller (Winusbcoinstaller.dll)
  • KMDF-Coinstaller (WdfcoinstallerXXX.dll)
  • Eine INF-Datei, die Winusb.sys als Funktionstreiber für das Gerät installiert. Weitere Informationen finden Sie unter Schreiben einer angepassten INF für die WinUSB-Installation.
  • Eine signierte Katalogdatei für das Paket. Diese Datei ist erforderlich, um WinUSB auf x64-Versionen von Windows ab Vista zu installieren.

WinUSB-Installationspaket.

Vergewissern Sie sich, dass der Inhalt des Treiberpakets diesen Anforderungen entspricht:

  • Die KMDF- und WinUSB-Coinstallerdateien müssen aus derselben Version des Windows Driver Kit (WDK) abgerufen werden.
  • Die Coinstallerdateien müssen von der neuesten Version des WDK abgerufen werden, damit der Treiber alle neuesten Windows-Versionen unterstützt.
  • Der Inhalt des Treiberpakets muss mit einer Winqual-Release-Signatur digital signiert sein. Weitere Informationen zum Erstellen und Testen signierter Katalogdateien finden Sie unter Kernel-Mode Code Signing Walkthrough auf der Website von Windows Dev Center – Hardware.
  1. Laden Sie das Windows Driver Kit (WDK) herunter, und installieren Sie es.

  2. Erstellen Sie einen Treiberpaket-Ordner auf dem Computer, an den das USB-Gerät angeschlossen ist. Zum Beispiel: c:\UsbDevice.

  3. Kopieren Sie den WinUSB-Coinstaller (WinusbcoinstallerX.dll) aus dem Ordner "WinDDK\BuildNumber>\<redist\winusb" in den Treiberpaketordner.

    Der WinUSB-Coinstaller (Winusbcoinstaller.dll) installiert WinUSB bei Bedarf auf dem Zielsystem. Der WDK enthält je nach Systemarchitektur drei Versionen des Coinstallers: x86-basierte, x64-basierte und Itanium-basierte Systeme. Jeder Coinstaller heißt WinusbcoinstallerX.dll und befindet sich im entsprechenden Unterverzeichnis im Ordner "WinDDK\<BuildNumber>\redist\winusb".

  4. Kopieren Sie den KMDF-Coinstaller (WdfcoinstallerXXX.dll) aus dem Ordner "WinDDK\BuildNumber>\<redist\wdf" in den Treiberpaketordner.

    Der KMDF-Coinstaller (WdfcoinstallerXXX.dll) installiert bei Bedarf die richtige Version von KMDF auf dem Zielsystem. Die Version des WinUSB-Coinstallers muss mit dem KMDF-Coinstaller übereinstimmen, da KMDF-basierte Clienttreiber wie Winusb.sys die entsprechende Version des KMDF-Frameworks auf dem System ordnungsgemäß installiert werden müssen. Beispielsweise erfordert Winusbcoinstaller2.dll KMDF, Version 1.9, die Wdfcoinstaller01009.dll installiert. Die x86- und x64-Versionen von WdfcoinstallerXXX.dll sind im WDK unter dem Ordner WinDDK\<BuildNumber>\redist\wdf enthalten. Die folgende Tabelle zeigt den WinUSB-Coinstaller und den zugehörigen KMDF-Coinstaller, der auf dem Zielsystem verwendet werden soll.

    Verwenden Sie diese Tabelle, um den WinUSB-Coinstaller und den zugehörigen KMDF-Coinstaller zu ermitteln.

    WinUSB Coinstaller Version der KMDF-Bibliothek KMDF-Coinstaller
    Winusbcoinstaller.dll Benötigt KMDF Version 1.5 oder höher Wdfcoinstaller01005.dll
    Wdfcoinstaller01007.dll
    Wdfcoinstaller01009.dll
    Winusbcoinstaller2.dll Benötigt KMDF Version 1.9 oder höher Wdfcoinstaller01009.dll
    Winusbcoinstaller2.dll Benötigt KMDF Version 1.11 oder höher WdfCoInstaller01011.dll
  5. Schreiben Sie eine INF-Datei, die Winusb.sys als Funktionstreiber für das USB-Gerät installiert.

  6. Erstellen Sie eine signierte Katalogdatei für das Paket. Diese Datei ist erforderlich, um WinUSB auf x64-Versionen von Windows zu installieren.

  7. Schließen Sie das USB-Gerät an Ihren Computer an.

  8. Um den Treiber zu installieren, öffnen Sie Geräte-Manager. Folgen Sie den Anweisungen des Assistenten zum Aktualisieren der Treibersoftware, und wählen Sie die manuelle Installation. Geben Sie den Speicherort des Treiberpaketordners an, um die Installation abzuschließen.