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

Cet article est destiné aux programmeurs. Si vous êtes un client qui rencontre des problèmes USB, consultez Résoudre les problèmes de USB-C dans Windows

Installation automatique de WinUSB sans fichier INF

En tant que fournisseur de matériel OEM ou indépendant (IHV), vous pouvez créer votre appareil afin que le Winusb.sys soit installé automatiquement. 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, Windows 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 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 Le Gestionnaire d’appareils et recherchez l’appareil.
  3. Cliquez avec le bouton droit sur l’appareil et sélectionnez Mettre à jour le logiciel du 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 d’appareil pour votre appareil à l’aide d’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 chaînes 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.

É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.

Voici un exemple de fichier INF universel valide pour les plateformes x64 et ARM64 exécutant Windows 10 ou version ultérieure. Cet exemple n’inclut pas de coinstallateurs, ce qui le rend éligible à la signature par le portail du tableau de bord du Centre de développement matériel .

;
; Universal INF file for WinUsb installation
;

[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 and Models sections ===========

[Manufacturer]
%ManufacturerName% = Standard,NTamd64,NTarm64

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

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

; =================== 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}"

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

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

Ce fichier INF universel peut être utilisé sur plusieurs plateformes Windows (x64 et ARM64) et peut être signé par le portail du tableau de bord du Centre de développement matériel .

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). Windows 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.

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}"

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. Voici les étapes à suivre pour créer un package de pilotes qui installe Winusb.sys :

  1. Téléchargez le Kit de pilotes Windows (WDK) et installez-le sur votre ordinateur.

  2. Créez un dossier de package de pilotes sur votre système où le périphérique USB est connecté, C :\UsbDevice, par exemple.

  3. Écrivez un fichier .inf qui installe Winusb.sys en tant que pilote de fonction pour le périphérique USB et enregistrez-le dans le dossier du package de pilotes. Vous trouverez un exemple d’écriture de ce fichier dans la section Écriture d’un INF personnalisé pour l’installation de WinUSB de ce document.

  4. Créez un fichier de catalogue signé pour le package. Ce fichier est requis pour installer WinUSB sur Windows. Vous trouverez plus d’informations sur la création et le test des fichiers catalogue signés dans Kernel-Mode procédure pas à pas de signature de code sur le site du Centre de développement Windows - Matériel.

    Diagramme montrant le contenu d’un package d’installation de pilote WinUSB

  5. Connectez l’appareil USB à votre ordinateur.

  6. Ouvrez Device Manager sur votre ordinateur. Suivez les instructions de l’assistant Mettre à jour le pilote et choisissez l’installation manuelle. Lorsque vous y êtes invité, indiquez l’emplacement du dossier du package de pilotes pour terminer l’installation.