Appareil WinUSB

Dans cet article, vous allez découvrir comment un appareil WinUSB est reconnu par Windows.

Les informations contenues dans cet article s’appliquent à vous si vous êtes un oem ou un fournisseur de matériel indépendant (IHV) qui développe un appareil pour lequel vous souhaitez utiliser Winusb.sys comme pilote de fonction et que vous souhaitez charger automatiquement le pilote sans avoir à fournir un INF personnalisé.

Qu’est-ce qu’un appareil WinUSB

Un appareil WinUSB est un appareil USB (Universal Serial Bus) dont le microprogramme définit certains descripteurs de fonctionnalités du système d’exploitation Microsoft qui signalent l’ID compatible comme « WINUSB ».

L’objectif d’un appareil WinUSB est de permettre à Windows de charger Winusb.sys en tant que pilote de fonction de l’appareil sans fichier INF personnalisé. Pour un appareil WinUSB, vous n’êtes pas obligé de distribuer des fichiers INF pour votre appareil, ce qui simplifie le processus d’installation du pilote pour les utilisateurs finaux. À l’inverse, si vous devez fournir un inf personnalisé, vous ne devez pas définir votre appareil comme un appareil WinUSB et spécifier l’ID matériel de l’appareil dans l’INF.

Microsoft fournit Winusb.inf qui contient les informations requises pour installer Winusb.sys en tant que pilote de périphérique pour un périphérique USB.

Avant Windows 8, pour charger Winusb.sys en tant que pilote de fonction, vous deviez fournir un INF personnalisé. L’INF personnalisé spécifie l’ID matériel spécifique à l’appareil et inclut également des sections du winusb.inf dans la boîte de dialogue. Ces sections sont requises pour instancier le service, copier les fichiers binaires de boîte de réception et inscrire un GUID d’interface d’appareil que les applications doivent rechercher l’appareil et lui parler. Pour plus d’informations sur l’écriture d’un INF personnalisé, consultez Installation de WinUSB (Winusb.sys).

Dans Windows 8, le fichier Winusb.inf intégré a été mis à jour pour permettre à Windows de faire correspondre automatiquement le fichier INF à un appareil WinUSB.

Installation de l’appareil WinUSB à l’aide de la boîte de dialogue Winusb.inf

Dans Windows 8, le fichier Winusb.inf intégré a été mis à jour. L’INF inclut une section d’installation qui fait référence à un ID compatible appelé « USB\MS_COMP_WINUSB ».

[Generic.Section.NTamd64]
%USB\MS_COMP_WINUSB.DeviceDesc%=WINUSB,USB\MS_COMP_WINUSB

L’INF mis à jour inclut également une nouvelle classe d’installation appelée « USBDevice ».

La classe d’installation « USBDevice » est disponible pour les appareils pour lesquels Microsoft ne fournit pas de pilote intégré. En règle générale, ces appareils n’appartiennent pas à des classes USB bien définies telles que Audio, Bluetooth, etc., et nécessitent un pilote personnalisé. Si votre appareil est un appareil WinUSB, il n’appartient probablement pas à une classe USB. Par conséquent, votre appareil doit être installé sous la classe d’installation « USBDevice ». Le fichier Winusb.inf mis à jour facilite cette exigence.

À propos de l’utilisation de la classe USBDevice

N’utilisez pas la classe d’installation « USB » pour les appareils non classés. Cette classe est réservée à l’installation de contrôleurs, de hubs et d’appareils composites. L’inutilisation incorrecte de la classe « USB » peut entraîner des problèmes de fiabilité et de performances importants. Pour les appareils non classés, utilisez « USBDevice ».

Dans Windows 8, pour utiliser la classe d’appareil « USBDevice », ajoutez simplement ceci à votre INF :

  [Version]
  ...
  Class=USBDevice
  ClassGuid={88BAE032-5A81-49f0-BC3D-A4FF138216D6}
  ...

Dans Gestionnaire de périphériques vous verrez un nouveau nœud USB Universal Serial Bus périphériques et votre appareil s’affiche sous ce nœud.

Dans Windows 7, en plus des lignes précédentes, vous devez créer ces paramètres de Registre dans le fichier INF :

  ;---------- Add Registry Section ----------
  [USBDeviceClassReg]
  HKR,,,,"Universal Serial Bus devices"
  HKR,,NoInstallClass,,1
  HKR,,SilentInstall,,1
  HKR,,IconPath,%REG_MULTI_SZ%,"%systemroot%\system32\setupapi.dll,-20"

Dans Gestionnaire de périphériques, votre appareil s’affiche sous Périphériques USB Universal Serial Bus. Toutefois, la description de la classe d’appareil est dérivée du paramètre de Registre spécifié dans votre inf.

Notez que la classe « USBDevice » n’est pas limitée à WinUSB. Si vous avez un pilote personnalisé pour votre appareil, vous pouvez utiliser la classe d’installation « USBDevice » dans l’inf personnalisé.

Pendant l’énumération de l’appareil, la pile de pilotes USB lit l’ID compatible à partir de l’appareil. Si l’ID compatible est « WINUSB », Windows l’utilise comme identificateur d’appareil et trouve une correspondance dans la boîte de dialogue Winusb.inf mise à jour, puis charge Winusb.sys en tant que pilote de fonction de l’appareil.

Cette image est destinée à un appareil MUTT d’interface unique qui est défini comme un appareil WinUSB et, par conséquent, Winusb.sys est chargé en tant que pilote de fonction pour l’appareil.

Capture d’écran de Windows Gestionnaire de périphériques montrant un appareil WinUSB.

Pour les versions de Windows antérieures à Windows 8, winusb.inf mis à jour est disponible via Windows Update. Si votre ordinateur est configuré pour obtenir automatiquement la mise à jour du pilote, le pilote WinUSB sera installé sans intervention de l’utilisateur à l’aide du nouveau package INF.

Comment modifier la description de l’appareil pour un appareil WinUSB

Pour un appareil WinUSB, Gestionnaire de périphériques affiche « Appareil WinUsb » comme description de l’appareil. Cette chaîne est dérivée de Winusb.inf. S’il existe plusieurs appareils WinUSB, tous les appareils obtiennent la même description d’appareil.

Pour identifier et différencier de manière unique l’appareil dans Gestionnaire de périphériques, Windows 8 fournit une nouvelle propriété sur une classe d’appareil qui indique au système d’accorder la priorité à la description de l’appareil signalée par l’appareil (dans son descripteur de chaîne iProduct) sur la description dans l’INF. La classe « USBDevice » définie dans Windows 8 définit cette propriété. En d’autres termes, lorsqu’un appareil est installé sous la classe « USBDevice », le système interroge l’appareil pour obtenir une description de l’appareil et définit la chaîne Gestionnaire de périphériques sur ce qui est récupéré dans la requête. Dans ce cas, la description de l’appareil fournie dans l’INF est ignorée. Notez les chaînes de description de l’appareil : « MUTT » dans l’image précédente. La chaîne est fournie par le périphérique USB dans son descripteur de chaîne de produit.

La nouvelle propriété de classe n’est pas prise en charge sur les versions antérieures de Windows. Pour avoir une description personnalisée de l’appareil sur une version antérieure de Windows, vous devez écrire votre propre INF personnalisé.

Comment configurer un appareil WinUSB

Pour identifier un périphérique USB en tant qu’appareil WinUSB, le microprogramme de l’appareil doit avoir des descripteurs de système d’exploitation Microsoft. Pour plus d’informations sur les descripteurs, consultez les spécifications décrites ici : Descripteurs de système d’exploitation Microsoft.

Prise en charge des descripteurs de fonctionnalités étendus

Pour que la pile de pilotes USB sache que l’appareil prend en charge les descripteurs de fonctionnalités étendues, l’appareil doit définir un descripteur de chaîne de système d’exploitation stocké dans l’index de chaîne 0xEE. Pendant l’énumération, la pile de pilotes interroge le descripteur de chaîne. Si le descripteur est présent, la pile de pilotes suppose que l’appareil contient un ou plusieurs descripteurs de fonctionnalités de système d’exploitation et les données nécessaires pour récupérer ces descripteurs de fonctionnalités.

Le descripteur de chaîne récupéré a une valeur de champ bMS_VendorCode . La valeur indique le code fournisseur que la pile de pilotes USB doit utiliser pour récupérer le descripteur de fonctionnalité étendu.

Pour plus d’informations sur la définition d’un descripteur de chaîne de système d’exploitation, consultez « Le descripteur de chaîne du système d’exploitation » dans les spécifications décrites ici : Descripteurs de système d’exploitation Microsoft.

Définition de l’ID compatible

Un descripteur de fonctionnalité de système d’exploitation d’ID compatible étendu requis pour correspondre au winusb.inf intégré et charger le module de pilote WinUSB.

Le descripteur de fonctionnalité de système d’exploitation d’ID compatible étendu comprend une section d’en-tête suivie d’une ou plusieurs sections de fonction selon que l’appareil est un appareil composite ou non composite. La section d’en-tête spécifie la longueur du descripteur entier, le nombre de sections de fonction et le numéro de version. Pour un appareil non composite, l’en-tête est suivi d’une section de fonction associée à la seule interface de l’appareil. Le champ compatibleID de cette section doit spécifier « WINUSB » comme valeur de champ. Pour un appareil composite, il existe plusieurs sections de fonction. Le champ compatibleID de chaque section de fonction doit spécifier « WINUSB ».

Inscription d’un GUID d’interface d’appareil

Descripteur de fonctionnalité de système d’exploitation de propriétés étendues requis pour inscrire son GUID d’interface d’appareil. Le GUID est requis pour rechercher l’appareil à partir d’une application ou d’un service, configurer l’appareil et effectuer des opérations d’E/S.

Dans les versions précédentes de Windows, l’inscription du GUID d’interface d’appareil s’effectue via l’INF personnalisé. À partir de Windows 8, votre appareil doit signaler le GUID d’interface à l’aide du descripteur de fonctionnalité de système d’exploitation des propriétés étendues.

Le descripteur de fonctionnalité de système d’exploitation des propriétés étendues comprend une section d’en-tête qui est suivie d’une ou plusieurs sections de propriétés personnalisées. La section en-tête décrit l’ensemble du descripteur de propriétés étendues, y compris sa longueur totale, le numéro de version et le nombre de sections de propriétés personnalisées. Pour inscrire le GUID d’interface de l’appareil, ajoutez une section de propriété personnalisée qui définit le champ bPropertyName sur « DeviceInterfaceGUID » et wPropertyNameLength sur 40 octets. Générez un GUID d’interface d’appareil unique à l’aide d’un générateur GUID et définissez le champ bPropertyData sur ce GUID, par exemple « {8FE6D4D7-49DD-41E7-9486-49AFC6BFE475} ». Le GUID est spécifié sous la forme d’une chaîne Unicode et la longueur de la chaîne est de 78 octets (y compris la fin null).

       
bPropertyData 78 octets 7B 00 38 00 46 00 45 00 36 00 44 00 34 00 44 00 37 00 2D 00 34 00 39 00 00 44 00 2D 00 34 00 31 00 45 00 37 00 2 00 39 00 34 00 38 00 36 00 2D 00 34 00 39 00 41 00 46 0 0 43 00 36 00 42 00 46 00 45 00 34 00 37 00 35 00 7D 00 00 00 La valeur de la propriété est {8FE6D4D7-49DD-41E7-9486-49AFC6BFE475}.

Pendant l’énumération de l’appareil, la pile de pilotes USB récupère ensuite la valeur DeviceInterfaceGUID du descripteur de fonctionnalité de système d’exploitation des propriétés étendues et inscrit l’appareil dans la clé matérielle de l’appareil. Une application peut récupérer la valeur à l’aide des API SetupDiXxx (voir SetupDiOpenDevRegKey). Pour plus d’informations, consultez Comment accéder à un périphérique USB à l’aide de fonctions WinUSB.

Activation ou désactivation des fonctionnalités de gestion de l’alimentation WinUSB

Avant Windows 8, pour configurer les fonctionnalités de gestion de l’alimentation de WinUSB, vous deviez écrire des valeurs d’entrée de Registre dans le HW. Section AddReg de votre fichier INF personnalisé.

Dans Windows 8 et versions ultérieures, vous pouvez spécifier les paramètres d’alimentation dans l’appareil. Vous pouvez signaler des valeurs via le descripteur de fonctionnalité de système d’exploitation des propriétés étendues qui active ou désactive les fonctionnalités dans WinUSB pour cet appareil. Il existe deux fonctionnalités que nous pouvons configurer : la suspension sélective et la mise en éveil du système. La suspension sélective permet à l’appareil d’entrer dans un état de faible consommation d’énergie lorsqu’il est inactif. La veille du système fait référence à la capacité d’un appareil à mettre en éveil un système lorsque le système est à faible consommation d’énergie.

Pour plus d’informations sur les fonctionnalités de gestion de l’alimentation de WinUSB, consultez Gestion de l’alimentation WinUSB.

Nom de la propriété Description
DeviceIdleEnabled Cette valeur est définie sur 1 pour indiquer que l’appareil peut s’arrêter en cas d’inactivité (suspension sélective).
DefaultIdleState Cette valeur est définie sur 1 pour indiquer que l’appareil peut être suspendu lorsqu’il est inactif par défaut.
DefaultIdleTimeout Cette valeur est définie sur 5 000 en millisecondes pour indiquer le temps d’attente en millisecondes avant de déterminer qu’un appareil est inactif.
UserSetDeviceIdleEnabled Cette valeur est définie sur 1 pour permettre à l’utilisateur de contrôler la capacité de l’appareil à activer ou désactiver la suspension sélective USB. Une case activée zone Autoriser l’ordinateur à éteindre cet appareil pour économiser l’alimentation sur la page de propriétés Gestion de l’alimentation de l’appareil et l’utilisateur peut case activée ou décocher la case pour activer ou désactiver la suspension sélective USB.
SystemWakeEnabled Cette valeur est définie sur 1 pour permettre à l’utilisateur de contrôler la capacité de l’appareil à sortir le système d’un état de faible consommation. Lorsque cette option est activée, la zone Autoriser cet appareil à sortir l’ordinateur case activée s’affiche dans la page des propriétés de gestion de l’alimentation des appareils. L’utilisateur peut case activée ou décocher la case pour activer ou désactiver l’éveil du système USB.

Par exemple, pour activer la suspension sélective sur l’appareil, ajoutez une section de propriété personnalisée qui définit le champ bPropertyName sur une chaîne Unicode, « DeviceIdleEnabled » et wPropertyNameLength sur 36 octets. Définissez le champ bPropertyData sur « 0x00000001 ». Les valeurs de propriété sont stockées sous forme d’entiers 32 bits little-endian.

Pendant l’énumération, la pile de pilotes USB lit les descripteurs de fonctionnalité de propriétés étendues et crée des entrées de Registre sous cette clé :

HKEY_LOCAL_MACHINE\Système\Currentcontrolset\Enum\USB\<Identificateur d’instance d’identificateur>\<d’appareil Paramètres>\de l’appareil

Cette image montre des exemples de paramètres pour un appareil WinUSB.

Capture d’écran de l’Éditeur du Registre Windows montrant les paramètres d’un appareil WinUSB.

Pour obtenir d’autres exemples, consultez les spécifications sur les descripteurs de système d’exploitation Microsoft.