Installation de WinUSB (Winusb.sys) pour les développeurs

Pour certains périphériques USB (Universal Serial Bus), tels que les appareils auxquels une seule application accède, vous pouvez installer WinUSB (Winusb.sys) dans la pile en mode noyau de l’appareil en tant que pilote de fonction du périphérique USB au lieu d’implémenter un pilote.

Important

Cette rubrique s’adresse aux développeurs. Si vous êtes un client rencontrant des problèmes USB, consultez Résoudre les problèmes USB courants

Installation automatique de WinUSB sans fichier INF

En tant qu’oem ou fournisseur de matériel indépendant (IHV), vous pouvez créer votre appareil afin que le Winusb.sys soit installé automatiquement sur Windows 8 et versions ultérieures du système d’exploitation. Un tel appareil est appelé appareil WinUSB et ne vous oblige pas à écrire un fichier INF personnalisé qui fait référence à Winusb.inf dans la boîte.

Lorsque vous connectez un appareil WinUSB, le système lit les informations de l’appareil et charge automatiquementWinusb.sys .

Pour plus d’informations, consultez Appareil WinUSB.

Installation de WinUSB en spécifiant la classe d’appareil fournie par le système

Lorsque vous connectez votre appareil, vous remarquerez peut-être que Windows charge automatiquementWinusb.sys (si l’IHV a défini l’appareil comme un appareil WinUSB). Sinon, suivez ces instructions pour charger le pilote :

  1. Branchez votre appareil au système hôte.
  2. Ouvrez Gestionnaire de périphériques et recherchez le périphérique.
  3. Sélectionnez et maintenez enfoncée (ou cliquez avec le bouton droit) sur l’appareil, puis sélectionnez Mettre à jour le logiciel du pilote... dans le menu contextuel.
  4. Dans l’Assistant, sélectionnez Parcourir mon ordinateur pour le logiciel du pilote.
  5. Sélectionnez Laissez-moi choisir dans une liste de pilotes de périphérique sur mon ordinateur.
  6. Dans la liste des classes d’appareils, sélectionnez Appareils Universal Serial Bus.
  7. L’Assistant affiche l’appareil WinUsb. Sélectionnez-le pour charger le pilote.

Si les périphériques Universal Serial Bus n’apparaissent pas dans la liste des classes d’appareils, vous devez installer le pilote à l’aide d’un INF personnalisé. La procédure précédente n’ajoute pas de GUID d’interface d’appareil pour qu’une application (application UWP ou application de bureau Windows) accède à l’appareil. Vous devez ajouter le GUID manuellement en suivant cette procédure.

  1. Chargez le pilote comme décrit dans la procédure précédente.

  2. Générez un GUID d’interface d’appareil pour votre appareil à l’aide d’un outil tel que guidgen.exe.

  3. Recherchez la clé de Registre pour l’appareil sous cette clé :

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

  4. Sous la clé Paramètres de l’appareil , ajoutez une entrée de Registre String nommée DeviceInterfaceGUID ou une entrée multi-chaîne nommée DeviceInterfaceGUIDs. Définissez la valeur sur le GUID que vous avez généré à l’étape 2.

  5. Déconnectez l’appareil du système et reconnectez-le au même port physique. Remarque : Si vous modifiez le port physique, vous devez répéter les étapes 1 à 4.

Écriture d’un INF personnalisé pour l’installation de WinUSB

Dans le cadre du package de pilotes, vous fournissez un fichier .inf qui installe Winusb.sys en tant que pilote de fonction pour le périphérique USB.

L’exemple de fichier .inf suivant montre l’installation de WinUSB pour la plupart des périphériques USB avec certaines modifications, telles que la modification des USB_Install dans les noms de section en une valeur DDInstall appropriée. Vous devez également modifier les sections version, fabricant et modèle si nécessaire. Par exemple, fournissez le nom d’un fabricant approprié, le nom de votre fichier de catalogue signé, la classe d’appareil appropriée, ainsi que l’identificateur de fournisseur (VID) et l’identificateur de produit (PID) de l’appareil. Pour plus d’informations sur la création d’un fichier catalogue, consultez Création d’un fichier catalogue pour Test-Signing un package de pilotes.

Notez également que la classe d’installation est définie sur « USBDevice ». Les fournisseurs peuvent utiliser la classe d’installation « USBDevice » pour les appareils qui n’appartiennent pas à une autre classe et qui ne sont pas des contrôleurs hôtes ou des hubs USB.

Si vous installez WinUSB comme pilote de fonction pour l’une des fonctions d’un périphérique composite USB, vous devez fournir l’ID matériel associé à la fonction, dans le fichier INF. Vous pouvez obtenir l’ID matériel de la fonction à partir des propriétés du devnode dans Gestionnaire de périphériques. Le format de chaîne d’ID matériel est « USB\VID_vvvv&PID_pppp ».

L’inf suivant installe WinUSB en tant que pilote de fonction de la carte USB FX2 OSR sur un système x64.

À compter de Windows 10 version 1709, le Kit de pilotes Windows fournit desInfVerif.exe que vous pouvez utiliser pour tester un fichier INF de pilote pour vous assurer qu’il n’y a aucun problème de syntaxe et que le fichier INF est universel. Nous vous recommandons de fournir un INF universel. Pour plus d’informations, consultez Utilisation d’un fichier INF universel.

;
;
; 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

Incluez uniquement une section ClassInstall32 dans un fichier INF d’appareil pour installer une nouvelle classe d’installation d’appareil personnalisée. Les fichiers INF pour les appareils d’une classe installée, qu’il s’agisse d’une classe d’installation d’appareil fournie par le système ou d’une classe personnalisée, ne doivent pas inclure de section ClassInstall32.

À l’exception des valeurs spécifiques de l’appareil et de plusieurs problèmes qui sont notés dans la liste suivante, vous pouvez utiliser ces sections et directives pour installer WinUSB pour n’importe quel appareil USB. Ces éléments de liste décrivent les includes et les directives dans le fichier .inf précédent.

  • USB_Install : les directives Include et Needs de la section USB_Install sont requises pour l’installation de WinUSB. Vous ne devez pas modifier ces directives.

  • USB_Install.Services : la directive Include de la section USB_Install.Services inclut le fichier .inf fourni par le système pour WinUSB (Winusb.inf). Ce fichier .inf est installé par le co-programme d’installation WinUSB s’il n’est pas déjà sur le système cible. La directive Needs spécifie la section dans Winusb.inf qui contient les informations requises pour installer Winusb.sys en tant que pilote de fonction de l’appareil. Vous ne devez pas modifier ces directives.

  • USB_Install.HW : cette section est la clé du fichier .inf. Il spécifie l’identificateur global unique (GUID) de l’interface de l’appareil pour votre appareil. La directive AddReg définit le GUID d’interface spécifié dans une valeur de Registre standard. Quand Winusb.sys est chargé en tant que pilote de fonction de l’appareil, il lit la valeur de Registre Clé DeviceInterfaceGUIDs et utilise le GUID spécifié pour représenter l’interface de l’appareil. Vous devez remplacer le GUID de cet exemple par celui que vous créez spécifiquement pour votre appareil. Si les protocoles de l’appareil changent, créez un GUID d’interface d’appareil.

    Note Le logiciel en mode utilisateur doit appeler SetupDiGetClassDevs pour énumérer les interfaces d’appareil inscrites associées à l’une des classes d’interface d’appareil spécifiées sous la clé DeviceInterfaceGUIDs. SetupDiGetClassDevs retourne le handle d’appareil pour l’appareil que le logiciel en mode utilisateur doit ensuite passer au WinUsb_Initialize routine pour obtenir un handle WinUSB pour l’interface de l’appareil. Pour plus d’informations sur ces routines, consultez Comment accéder à un périphérique USB à l’aide de fonctions WinUSB.

L’inf suivant installe WinUSB en tant que pilote de fonction de la carte USB FX2 OSR sur un système x64. L’exemple montre INF avec des co-programmes d’installation WDF.

;
;
; 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 : cette section, qui comprend les sections AddReg et CopyFiles référencées, contient des données et des instructions pour installer les co-programmes d’installation WinUSB et KMDF et les associer à l’appareil. La plupart des périphériques USB peuvent utiliser ces sections et directives sans modification.

  • Les versions x86 et x64 de Windows ont des co-programmes d’installation distincts.

    Chaque co-programme d’installation a des versions gratuites et vérifiées. Utilisez la version gratuite pour installer WinUSB sur des builds gratuites de Windows, y compris toutes les versions commerciales. Utilisez la version vérifiée (avec le suffixe « _chk ») pour installer WinUSB sur les builds vérifiées de Windows.

Chaque fois queWinusb.sys se charge, il inscrit une interface d’appareil qui possède les classes d’interface d’appareil spécifiées dans le Registre sous la clé DeviceInterfaceGUIDs .

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

Si vous utilisez le package WinUSB redistribuable pour Windows XP ou Windows Server 2003, veillez à ne pas désinstaller WinUSB dans vos packages de désinstallation. D’autres périphériques USB peuvent utiliser WinUSB. Ses fichiers binaires doivent donc rester dans le dossier partagé.

Comment créer un package de pilotes qui installe Winusb.sys

Pour utiliser WinUSB comme pilote de fonction de l’appareil, vous créez un package de pilotes. Le package de pilotes doit contenir les fichiers suivants :

  • Co-programme d’installation WinUSB (Winusbcoinstaller.dll)
  • Co-programme d’installation KMDF (WdfcoinstallerXXX.dll)
  • Fichier .inf qui installe Winusb.sys en tant que pilote de fonction de l’appareil. Pour plus d’informations, consultez Écriture d’un INF personnalisé pour l’installation de WinUSB.
  • Fichier catalogue signé pour le package. Ce fichier est requis pour installer WinUSB sur les versions x64 de Windows à partir de Vista.

Package d’installation WinUSB.

Assurez-vous que le contenu du package de pilotes répond aux exigences suivantes :

  • Les fichiers de co-programme d’installation KMDF et WinUSB doivent être obtenus à partir de la même version du Kit de pilotes Windows (WDK).
  • Les fichiers de co-programme d’installation doivent être obtenus à partir de la dernière version du WDK, afin que le pilote prenne en charge toutes les dernières versions de Windows.
  • Le contenu du package de pilotes doit être signé numériquement avec une signature de mise en production Winqual. Pour plus d’informations sur la création et le test de fichiers de catalogue signés, consultez Procédure pas à pas de signature de code en mode noyau sur le centre de développement Windows - Site matériel.
  1. Téléchargez le Kit de pilotes Windows (WDK) et installez-le.

  2. Créez un dossier de package de pilotes sur l’ordinateur auquel le périphérique USB est connecté. Par exemple, c :\UsbDevice.

  3. Copiez le co-programme d’installation WinUSB (WinusbcoinstallerX.dll) du dossier WinDDK\<BuildNumber>\redist\winusb vers le dossier du package de pilotes.

    Le co-programme d’installation WinUSB (Winusbcoinstaller.dll) installe WinUSB sur le système cible, si nécessaire. Le WDK comprend trois versions du co-programme d’installation en fonction de l’architecture système : systèmes x86, x64 et Itanium. Ils sont tous nommés WinusbcoinstallerX.dll et se trouvent dans le sous-répertoire approprié dans le dossier WinDDK\<BuildNumber>\redist\winusb .

  4. Copiez le co-programme d’installation KMDF (WdfcoinstallerXXX.dll) du dossier WinDDK\<BuildNumber>\redist\wdf vers le dossier du package du pilote.

    Le co-programme d’installation KMDF (WdfcoinstallerXXX.dll) installe la version correcte de KMDF sur le système cible, si nécessaire. La version du co-programme d’installation WinUSB doit correspondre au co-programme d’installation KMDF, car les pilotes clients basés sur KMDF, tels que Winusb.sys, nécessitent l’installation correcte de la version correspondante de l’infrastructure KMDF sur le système. Par exemple, Winusbcoinstaller2.dll nécessite KMDF version 1.9, qui est installée par Wdfcoinstaller01009.dll. Les versions x86 et x64 de WdfcoinstallerXXX.dll sont incluses avec le WDK sous le dossier WinDDK\<BuildNumber>\redist\wdf . Le tableau suivant montre le co-programme d’installation WinUSB et le co-programme d’installation KMDF associé à utiliser sur le système cible.

    Utilisez ce tableau pour déterminer le co-programme d’installation WinUSB et le co-programme d’installation KMDF associé.

    Co-programme d’installation WinUSB Version de la bibliothèque KMDF Co-programme d’installation KMDF
    Winusbcoinstaller.dll Nécessite KMDF version 1.5 ou ultérieure Wdfcoinstaller01005.dll
    Wdfcoinstaller01007.dll
    Wdfcoinstaller01009.dll
    Winusbcoinstaller2.dll Nécessite KMDF version 1.9 ou ultérieure Wdfcoinstaller01009.dll
    Winusbcoinstaller2.dll Nécessite KMDF version 1.11 ou ultérieure WdfCoInstaller01011.dll
  5. Écrivez un fichier .inf qui installe Winusb.sys comme pilote de fonction pour le périphérique USB.

  6. Créez un fichier de catalogue signé pour le package. Ce fichier est requis pour installer WinUSB sur les versions x64 de Windows.

  7. Attachez le périphérique USB à votre ordinateur.

  8. Ouvrez Gestionnaire de périphériques pour installer le pilote. Suivez les instructions de l’Assistant Mettre à jour le logiciel du pilote et choisissez Installation manuelle. Vous devez fournir l’emplacement du dossier du package de pilotes pour terminer l’installation.