Share via


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

Für bestimmte USB-Geräte (Universal Serial Bus), z. B. Geräte, auf die nur eine einzelne Anwendung zugreift, können Sie WinUSB (Winusb.sys) im Kernelmodusstapel des Geräts als Funktionstreiber des USB-Geräts installieren, anstatt einen Treiber zu implementieren.

Wichtig

Dieses Thema richtet sich an Programmierer. Wenn Sie ein Kunde sind, der USB-Probleme aufweist, finden Sie weitere Informationen unter Behandeln häufiger USB-Probleme.

Automatische Installation von WinUSB ohne INF-Datei

Als OEM oder unabhängiger Hardwareanbieter (IHV) können Sie Ihr Gerät so erstellen, dass die Winusb.sys automatisch auf Windows 8 und höheren 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 verbinden, liest das System Geräteinformationen und lädt Winusb.sys automatisch.

Weitere Informationen finden Sie unter WinUSB-Gerät.

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

Wenn Sie Ihr Gerät verbinden, stellen Sie möglicherweise fest, dass Windows automatischWinusb.sys lädt (wenn die IHV das Gerät als WinUSB-Gerät definiert hat). Befolgen Sie andernfalls die folgenden Anweisungen, um den Treiber zu laden:

  1. Schließen Sie Ihr Gerät an das Hostsystem an.
  2. Öffnen Sie Geräte-Manager, und suchen Sie das Gerät.
  3. Halten Sie das Gerät gedrückt (oder klicken Sie mit der rechten Maustaste darauf), und wählen Sie im Kontextmenü Treibersoftware aktualisieren... aus.
  4. Klicken Sie im Assistenten auf Computer nach Treibersoftware durchsuchen.
  5. Wählen Sie Aus einer Liste der Gerätetreiber auf meinem Computer Auswählen zulassen aus.
  6. Wählen Sie in der Liste der Geräteklassen Die Option Universal Serial Bus-Geräte aus.
  7. Der Assistent zeigt WinUsb-Gerät an. Wählen Sie ihn aus, um den Treiber zu laden.

Wenn Universal Serial Bus-Gerä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 ausführen.

  1. Laden Sie den Treiber wie im vorherigen Verfahren beschrieben.

  2. Generieren Sie eine GUID für die Geräteschnittstelle für Ihr Gerät, indem Sie ein Tool wie guidgen.exe verwenden.

  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 Geräteparameter einen Zeichenfolgenregistrierungseintrag namens DeviceInterfaceGUID oder einen Eintrag mit mehreren Zeichenfolgen mit dem Namen DeviceInterfaceGUIDs hinzu. Legen Sie den Wert auf die GUID fest, die Sie in Schritt 2 generiert haben.

  5. Trennen Sie das Gerät vom System, und verbinden Sie es erneut mit demselben physischen Port. Hinweis: Wenn Sie den physischen Port ändern, müssen Sie die Schritte 1 bis 4 wiederholen.

Schreiben einer benutzerdefinierten INF für 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 INF-Beispieldatei zeigt die WinUSB-Installation für die meisten USB-Geräte mit einigen Änderungen, z. B. das Ändern USB_Install in Abschnittsnamen in einen entsprechenden DDInstall-Wert . Sie sollten auch die Abschnitte Version, Hersteller und Modell nach Bedarf ändern. Geben Sie beispielsweise einen geeigneten Herstellernamen, den Namen Ihrer signierten Katalogdatei, die richtige Geräteklasse und den Anbieterbezeichner (VID) und product identifier (PID) für das Gerät an. Informationen zum Erstellen einer Katalogdatei finden Sie unter Erstellen einer Katalogdatei zum Test-Signing eines Treiberpakets.

Beachten Sie auch, dass die Setupklasse auf "USBDevice" festgelegt ist. Anbieter können die Setupklasse "USBDevice" 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 der Funktion zugeordnete Hardware-ID im INF angeben. Sie können die Hardware-ID für die Funktion aus den Eigenschaften des Devnodes in Geräte-Manager abrufen. Das Zeichenfolgenformat der Hardware-ID lautet "USB\VID_vvvv&PID_pppp".

Der folgende INF installiert WinUSB als Funktionstreiber des OSR USB FX2-Boards auf einem x64-basierten System.

Ab Windows 10 Version 1709 bietet das Windows Driver KitInfVerif.exe, mit denen Sie eine Treiber-INF-Datei testen können, um sicherzustellen, dass keine Syntaxprobleme vorliegen und die INF-Datei universell ist. Es wird empfohlen, ein universelles INF bereitzustellen. 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

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

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

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

  • USB_Install.Services: Die Include-Direktive im Abschnitt USB_Install.Services enthält die vom System bereitgestellte .inf für WinUSB (Winusb.inf). Diese INF-Datei wird vom WinUSB-Co-Installer installiert, wenn sie sich noch nicht auf dem Zielsystem befindet. Die Needs-Direktive gibt den Abschnitt in Winusb.inf an, der Informationen enthält, die zum Installieren 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. Sie gibt die GUID (Globally Unique Identifier) der Geräteschnittstelle für Ihr Gerät an. Die AddReg-Direktive legt die angegebene Schnittstellen-GUID in einem Standardregistrierungswert fest. Wenn Winusb.sys als Funktionstreiber des Geräts geladen wird, liest er 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 Die Benutzermodussoftware muss SetupDiGetClassDevs aufrufen, um die registrierten Geräteschnittstellen aufzulisten, die einer der unter der DeviceInterfaceGUIDs-Taste angegebenen Geräteschnittstellenklassen zugeordnet sind. SetupDiGetClassDevs gibt das Gerätehandle für das Gerät zurück, das die Benutzermodussoftware dann an die WinUsb_Initialize-Routine übergeben muss, um ein WinUSB-Handle für die Geräteschnittstelle zu erhalten. Weitere Informationen zu diesen Routinen finden Sie unter Zugreifen auf ein USB-Gerät mithilfe von WinUSB-Funktionen.

Der folgende INF installiert WinUSB als Funktionstreiber des OSR USB FX2-Boards auf einem x64-basierten System. Das Beispiel zeigt INF mit WDF-Co-Installern.

;
;
; 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, auf die verwiesen wird, enthält Daten und Anweisungen zum Installieren der WinUSB- und KMDF-Co-Installer und deren Zuordnung mit dem Gerät. Die meisten USB-Geräte können diese Abschnitte und Direktiven ohne Änderungen verwenden.

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

    Jeder Co-Installer 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 Einzelhandelsversionen. Verwenden Sie die überprüfte Version (mit dem Suffix "_chk"), um WinUSB auf überprüften Builds von Windows zu installieren.

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

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

Wenn Sie das verteilbare 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 verwenden möglicherweise WinUSB, sodass die Binärdateien im freigegebenen Ordner verbleiben müssen.

Erstellen eines Treiberpakets, das Winusb.sys installiert

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

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

WinUSB-Installationspaket.

Stellen Sie sicher, dass der Inhalt des Treiberpakets die folgenden Anforderungen erfüllt:

  • Die KMDF- und WinUSB-Co-Installer-Dateien müssen von derselben Version des Windows Driver Kit (WDK) abgerufen werden.
  • Die Co-Installer-Dateien müssen von der neuesten Version des WDK abgerufen werden, damit der Treiber alle aktuellen Windows-Versionen unterstützt.
  • Der Inhalt des Treiberpakets muss digital mit einer Winqual-Releasesignatur signiert werden. Weitere Informationen zum Erstellen und Testen signierter Katalogdateien finden Sie unter Exemplarische Vorgehensweise für die Kernelmodus-Codesignatur auf der Windows Dev Center -Hardwarewebsite.
  1. Laden Sie das Windows Driver Kit (WDK) herunter , und installieren Sie es.

  2. Erstellen Sie einen Treiberpaketordner auf dem Computer, mit dem das USB-Gerät verbunden ist. Beispiel: c:\UsbDevice.

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

    Der WinUSB-Co-Installer (Winusbcoinstaller.dll) installiert WinUSB bei Bedarf auf dem Zielsystem. Der WDK enthält je nach Systemarchitektur drei Versionen des Co-Installers: x86-basierte, x64-basierte und Itanium-basierte Systeme. Sie haben alle den Namen WinusbcoinstallerX.dll und befinden sich im entsprechenden Unterverzeichnis im Ordner WinDDK\<BuildNumber>\redist\winusb .

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

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

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

    WinUSB-Co-Installer KMDF-Bibliotheksversion KMDF-Co-Installer
    Winusbcoinstaller.dll Erfordert KMDF-Version 1.5 oder höher. Wdfcoinstaller01005.dll
    Wdfcoinstaller01007.dll
    Wdfcoinstaller01009.dll
    Winusbcoinstaller2.dll Erfordert KMDF-Version 1.9 oder höher. Wdfcoinstaller01009.dll
    Winusbcoinstaller2.dll Erfordert 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 unter x64-Versionen von Windows zu installieren.

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

  8. Öffnen Sie Geräte-Manager, um den Treiber zu installieren. Befolgen Sie die Anweisungen im Assistenten zum Aktualisieren der Treibersoftware , und wählen Sie manuelle Installation aus. Sie müssen den Speicherort des Treiberpaketordners angeben, um die Installation abzuschließen.