Hardware ID

Un ID hardware è una stringa di identificazione definita dal fornitore che Windows usa per associare un dispositivo a un pacchetto driver. Un ID hardware identifica il livello di specificità di un dispositivo e indica che qualsiasi pacchetto driver che dichiara che può funzionare con un dispositivo con tale ID può funzionare con questo dispositivo per un certo grado di funzionalità. Nella maggior parte dei casi, un dispositivo ha più di un ID hardware associato. In genere, un elenco di ID hardware viene ordinato dalla maggior parte al minimo adatto per un dispositivo. Ad esempio, l'elenco degli ID hardware concettuali per un dispositivo potrebbe essere simile al seguente:

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

Dove gli ID hardware effettivi rappresentano questi concetti usando stringhe che seguono i requisiti di formato di un ID hardware.

Creazione di un ID hardware per un dispositivo

Gli ID hardware vengono segnalati al Plug and Play Manager (PnP) dall'enumeratore di un dispositivo (il relativo driver del bus). In genere, quando l'autore di un driver del bus deve creare un nuovo ID hardware per un dispositivo che segnala a PnP, userà uno dei formati generici seguenti:

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

Si tratta del formato più comune per i singoli dispositivi PnP segnalati alla gestione Plug and Play (PnP) da un singolo enumeratore.

\*<generic-device-ID>

L'asterisco indica che il dispositivo è supportato da più enumeratori, ad esempio ISAPNP e BIOS.

<device-class-specific-ID>

Per altre informazioni, vedere Identificatori generici.

Una classe di dispositivo esistente che ha stabilito una propria convenzione di denominazione potrebbe usare un formato personalizzato. Per informazioni sui formati ID hardware, vedere la specifica hardware per tali bus.

Il numero di caratteri di un ID hardware, escluso un terminatore NULL, deve essere minore di MAX_DEVICE_ID_LEN. Questo vincolo si applica alla somma delle lunghezze di tutti i campi e \\ di tutti i separatori di campo in un ID hardware. Per altre informazioni, vedere la sezione Operazioni di IRP_MN_QUERY_ID.

ID hardware per i dispositivi enumerati radice

I dispositivi enumerati radice sono speciali in quanto possono essere creati usando le API in cui è possibile specificare un ID hardware. I dispositivi enumerati radice con ID hardware che condividono spazi dei nomi generici, ad esempio ROOT\SYSTEM possono essere in conflitto e comportano un'icona di errore giallo-bang in Gestione dispositivi durante l'aggiornamento di Windows.

È possibile evitare questo problema usando uno spazio dei nomi univoco per ogni driver con un dispositivo enumerato radice. Per un dispositivo USB o di sistema, anziché usare ROOT\USB o ROOT\SYSTEM" usare ROOT\[COMPANYNAME]\[DEVICENAME]. Prima di installare, verificare quindi se il devnode è già presente.

Recupero dell'elenco di ID hardware per un dispositivo

Per trovare l'elenco degli ID hardware per un determinato dispositivo, seguire questa procedura:

  1. Aprire Gestione dispositivi.

  2. Trovare il dispositivo nell'albero.

  3. Fare clic con il pulsante destro del mouse sul dispositivo e scegliere Proprietà.

  4. Selezionare la scheda Dettagli.

  5. Nell'elenco a discesa Proprietà selezionare ID hardware o ID compatibili.

L'elenco degli ID hardware può essere ottenuto a livello di codice recuperando la proprietà DEVPKEY_Device_HardwareIds in un dispositivo. Ad esempio, questa proprietà può essere recuperata con API, ad esempio IoGetDevicePropertyData, SetupDiGetDeviceProperty o CM_Get_DevNode_Property.

L'elenco degli ID hardware recuperati da questa routine è un valore REG_MULTI_SZ . Il numero massimo di caratteri in un elenco hardware, incluso un terminatore NULL dopo ogni ID hardware e un terminatore NULL finale, è REGSTR_VAL_MAX_HCID_LEN. Il numero massimo possibile di ID in un elenco di ID hardware è 64.

Esempi di ID hardware

Ecco un esempio di identificatore generico per un dispositivo PnP:

root\*PNP0F08

Ecco un esempio di identificatore per un dispositivo PCI:

PCI\VEN_1000&DEV_0001&SUBSYS_00000000&REV_02