ID du matériel

Un ID matériel est une chaîne d’identification définie par le fournisseur que Windows utilise pour faire correspondre un appareil à un package de pilotes. Un ID matériel identifie un appareil et indique que tout package de pilotes qui le déclare peut fonctionner avec un appareil qui a cet ID pour un certain degré de fonctionnalité. Dans la plupart des cas, plusieurs ID matériels sont associés à un appareil. En règle générale, une liste d’ID matériels est triée du plus au moins adapté à un appareil. Par exemple, la liste des ID matériels conceptuels d’un appareil peut ressembler à ceci :

<Product X made by company Y with firmware revision Z>
<Product X made by company Y that is a device of type W>

Où les ID matériels réels représentent ces concepts à l’aide de chaînes qui respectent les exigences de format d’un ID matériel.

Création d’un ID matériel pour un appareil

Les ID matériels sont signalés au gestionnaire de Plug-and-Play (PnP) par l’énumérateur d’un appareil (son pilote de bus). En règle générale, lorsque l’auteur d’un pilote de bus doit créer un id de matériel pour un appareil qu’il signale à PnP, il utilise l’un des formats génériques suivants :

<enumerator>\<enumerator-specific-device-ID>

Il s’agit du format le plus courant pour les appareils PnP individuels signalés au gestionnaire de Plug-and-Play (PnP) par un énumérateur unique.

\*<generic-device-ID>

L’astérisque indique que l’appareil est pris en charge par plusieurs énumérateurs, tels que ISAPNP et le BIOS.

<device-class-specific-ID>

Pour plus d’informations, consultez Identificateurs génériques.

Une classe d’appareil existante qui a établi sa propre convention d’affectation de noms peut utiliser un format personnalisé. Pour plus d’informations sur leurs formats d’ID matériel, consultez la spécification matérielle de ces bus.

Le nombre de caractères d’un ID matériel, à l’exception d’un terminateur NULL, doit être inférieur à MAX_DEVICE_ID_LEN. Cette contrainte s’applique à la somme des longueurs de tous les champs et \\ des séparateurs de champs dans un ID matériel. Pour plus d’informations, consultez la section Opérations de IRP_MN_QUERY_ID.

ID matériels pour les appareils énumérés racine

Les appareils énumérés à la racine sont spéciaux en ce qu’ils peuvent être créés à l’aide d’API où un ID matériel peut être fourni. Les appareils énumérés à la racine avec des ID matériels partageant des espaces de noms génériques tels que ROOT\SYSTEM peuvent entrer en conflit et entraîner une icône d’erreur jaune dans Gestionnaire de périphériques lors de la mise à jour de Windows.

Vous pouvez empêcher cela en utilisant un espace de noms unique pour chaque pilote qui a un appareil énuméré racine. Pour un périphérique USB ou système, au lieu d’utiliser ROOT\USB ou ROOT\SYSTEM" d’utiliser ROOT\[COMPANYNAME]\[DEVICENAME]. Ensuite, avant l’installation, case activée pour voir si le devnode est déjà présent.

Obtention de la liste des ID matériels pour un appareil

Pour trouver la liste des ID matériels pour un appareil donné, procédez comme suit :

  1. Ouvrez le Gestionnaire de périphériques.

  2. Recherchez l’appareil dans l’arborescence.

  3. Sélectionnez l’appareil avec le bouton droit, puis sélectionnez Propriétés.

  4. Sélectionnez l’onglet Détails.

  5. Dans la liste déroulante Propriété , sélectionnez ID matériels ou Id compatibles.

La liste des ID matériels peut également être obtenue par programmation en récupérant la propriété DEVPKEY_Device_HardwareIds sur un appareil. Par exemple, cette propriété peut être récupérée avec des API telles que IoGetDevicePropertyData, SetupDiGetDeviceProperty ou CM_Get_DevNode_Property.

La liste des ID matériels récupérés par cette routine est une valeur REG_MULTI_SZ . Le nombre maximal de caractères dans une liste de matériel, y compris une marque de fin NULL après chaque ID matériel et une marque de fin NULL finale, est REGSTR_VAL_MAX_HCID_LEN. Le nombre maximal d’ID possibles dans une liste d’ID matériels est de 64.

Exemples d’ID matériels

Voici un exemple d’identificateur générique pour un appareil PnP :

root\*PNP0F08

Voici un exemple d’identificateur pour un appareil PCI :

PCI\VEN_1000&DEV_0001&SUBSYS_00000000&REV_02