Partager via


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

Pour certains périphériques USB (Universal Serial Bus), vous pouvez installer WinUSB (Winusb.sys) au lieu d’implémenter un pilote.

Important

Cette rubrique s’adresse aux programmeurs. Si vous êtes un client et que vous rencontrez des problèmes liés à l'USB, consultez la section Corriger les problèmes liés à l'USB-C dans Windows.

Installation automatique de WinUSB sans fichier INF

En tant que fabricant d’équipement d’origine (OEM) ou fournisseur de matériel indépendant (IHV), vous pouvez construire votre appareil de manière à ce que Winusb.sys soit installé automatiquement sur Windows 8 et les 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 in-box.

Lorsque vous connectez un appareil WinUSB, le système lit les informations du périphérique et charge Winusb.sys automatiquement.

Pour plus d’informations, consultez Appareil WinUSB.

Installation de WinUSB en spécifiant la classe de périphérique fournie par le système

Lorsque vous connectez votre appareil, vous remarquerez peut-être que Windows charge Winusb.sys automatiquement. Sinon, suivez ces instructions pour charger le pilote :

  1. Branchez votre appareil sur le système hôte.
  2. Ouvrez Gestionnaire de périphériques et recherchez le périphérique.
  3. Sélectionnez et maintenez (ou faites un clic droit) sur l’appareil et sélectionnez Mettre à jour le pilote... dans le menu contextuel.
  4. Dans l’assistant, sélectionnez Rechercher un pilote sur mon ordinateur.
  5. Sélectionnez Choisir parmi une liste de pilotes de périphériques sur mon ordinateur.
  6. Dans la liste des classes de périphériques, sélectionnez Périphériques USB universels.
  7. L’assistant affiche Appareil WinUsb. Sélectionnez-le pour charger le pilote.

Si les appareils Serial Bus universels 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 une application (application UWP ou application de bureau Windows) pour accéder à 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 de périphérique pour votre appareil en utilisant un outil tel que guidgen.exe.

  3. Trouvez 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 de type chaîne nommée DeviceInterfaceGUID ou une entrée de type 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.

Écrire un fichier INF personnalisé pour l’installation de WinUSB

Dans le cadre du package de pilote, vous fournissez un fichier .inf qui installe Winusb.sys comme 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 quelques modifications, telles que le changement de USB_Install dans les noms de section en une valeur DDInstall appropriée. Vous devez également changer les sections version, fabricant et modèle si nécessaire. Par exemple, fournissez un nom de fabricant approprié, le nom de votre fichier de catalogue signé, la classe de périphérique correcte, et l’identifiant de fournisseur (VID) et l’identifiant de produit (PID) pour le périphérique. Pour plus d’informations sur la création d’un fichier de catalogue, consultez Créer un fichier de catalogue pour la signature de test d’un package de pilote.

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

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 l’inf. Vous pouvez obtenir l’ID matériel de la fonction à partir des propriétés du devnode dans le Gestionnaire de périphériques. Le format de chaîne d’ID matériel est USB\VID_vvvv&PID_pppp.

Le fichier INF suivant installe WinUSB comme pilote de fonction pour la carte OSR USB FX2 sur un système basé sur x64.

À partir de Windows 10, version 1709, le Windows Driver Kit fournit InfVerif.exe que vous pouvez utiliser pour tester un fichier INF de pilote pour vous assurer qu’il n’y a pas de problèmes de syntaxe et que le fichier INF est universel. Nous recommandons de fournir un INF universel. Pour plus d’informations, consultez Utiliser 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

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

À l’exception des valeurs spécifiques au périphérique et de plusieurs problèmes notés dans la liste suivante, vous pouvez utiliser ces sections et directives pour installer WinUSB pour tout périphérique USB. Ces éléments de liste décrivent les Inclusions et Directives dans le fichier .inf précédent.

  • USB_Install : Les directives Include et Needs dans la section USB_Install sont nécessaires pour installer WinUSB. Vous ne devez pas modifier ces directives.

  • USB_Install.Services : La directive Include dans la section USB_Install.Services inclut le fichier .inf fourni par le système pour WinUSB (Winusb.inf). Le coinstallateur WinUSB installe ce fichier .inf 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 nécessaires 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. Elle spécifie l’identificateur unique global (GUID) de l’interface de périphérique pour votre appareil. La directive AddReg définit le GUID d’interface spécifié dans une valeur de registre standard. Lorsque Winusb.sys est chargé en tant que pilote de fonction de l’appareil, il lit la valeur de registre DeviceInterfaceGUIDs et utilise le GUID spécifié pour représenter l’interface de périphérique. Vous devez remplacer le GUID de cet exemple par un que vous créez spécifiquement pour votre appareil. Si les protocoles de l’appareil changent, créez un nouveau GUID d’interface de périphérique.

    Remarque

    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 renvoie le handle de l’appareil que le logiciel en mode utilisateur doit ensuite passer à la routine WinUsb_Initialize pour obtenir un handle WinUSB pour l’interface de périphérique. Pour plus d’informations sur ces routines, consultez Comment accéder à un périphérique USB en utilisant les fonctions WinUSB.

Le fichier INF suivant installe WinUSB comme pilote de fonction pour la carte OSR USB FX2 sur un système basé sur x64. L’exemple montre inf avec des coinstallateurs 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 inclut les sections AddReg et CopyFiles référencées, contient des données et des instructions pour installer les coinstallateurs 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 coinstallateurs distincts.

    Chaque coinstallateur dispose de versions gratuites et vérifiées. Utilisez la version gratuite pour installer WinUSB sur les versions gratuites de Windows, y compris toutes les versions de détail. Pour installer WinUSB sur les builds vérifiées de Windows, utilisez la version vérifiée (avec le suffixe « _chk »).

Chaque fois que Winusb.sys se charge, il enregistre une interface de périphérique qui a les classes d’interface de périphérique 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, assurez-vous de ne pas désinstaller WinUSB dans vos packages de désinstallation. D’autres périphériques USB peuvent utiliser WinUSB, donc ses binaires doivent rester dans le dossier partagé.

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

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

  • Coinstallateur WinUSB (Winusbcoinstaller.dll)
  • Coinstallateur KMDF (WdfcoinstallerXXX.dll)
  • Un fichier .inf qui installe Winusb.sys en tant que pilote de fonction du périphérique. Pour plus d’informations, consultez Écrire un fichier INF personnalisé pour l’installation de WinUSB.
  • Un fichier de 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 pilote répond à ces exigences :

  • Les fichiers de coinstallation KMDF et WinUSB doivent être obtenus à partir de la même version du Kit de pilotes Windows (WDK).
  • Les fichiers de coinstallation doivent être obtenus à partir de la dernière version de WDK, afin que le pilote prenne en charge toutes les dernières versions de Windows.
  • Le contenu du package de pilote doit être signé numériquement avec une signature de version Winqual. Pour plus d’informations sur la création et le test de fichiers de catalogue signés, consultez Guide de signature de code en mode noyau sur le site Windows Dev Center - Hardware.
  1. Téléchargez le Windows Driver Kit (WDK) et installez-le.

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

  3. Copiez le coinstallateur WinUSB (WinusbcoinstallerX.dll) à partir du dossier WinDDK\<BuildNumber>\redist\winusb dans le dossier du package de pilotes.

    Le coinstallateur WinUSB (Winusbcoinstaller.dll) installe WinUSB sur le système cible, si nécessaire. Le WDK comprend trois versions de la coinstallation en fonction de l’architecture système : systèmes x86, x64 et itanium. Chaque coinstallateur est nommé WinusbcoinstallerX.dll et se trouve dans le sous-répertoire approprié dans le dossier WinDDK\<BuildNumber>\redist\winusb.

  4. Copiez le coinstallateur KMDF (WdfcoinstallerXXX.dll) à partir du dossier WinDDK\<BuildNumber>\redist\wdf dans le dossier du package de pilotes.

    Le coinstallateur KMDF (WdfcoinstallerXXX.dll) installe la version correcte de KMDF sur le système cible, si nécessaire. La version de la coinstallation WinUSB doit correspondre à la coinstallation 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 Wdfcoinstaller01009.dll s’installe. 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 coinstallateur WinUSB et le coinstallateur KMDF associé à utiliser sur le système cible.

    Utilisez ce tableau pour déterminer le coinstallateur WinUSB et le coinstallateur KMDF associé.

    Coinstallateur WinUSB Version de la bibliothèque KMDF Coinstallateur 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 en tant que 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. Connectez le périphérique USB à votre ordinateur.

  8. Pour installer le pilote, ouvrez Gestionnaire de périphériques. Suivez les instructions de l’assistant Mettre à jour le pilote et choisissez l’installation manuelle. Pour terminer l’installation, indiquez l’emplacement du dossier du package de pilotes.