Hardware ID

Un ID hardware è una stringa di identificazione definita dal fornitore usata da Windows per associare un dispositivo a un pacchetto driver. Un ID hardware identifica un dispositivo e indica che qualsiasi pacchetto driver che lo dichiara può funzionare con un dispositivo con tale ID per un certo grado di funzionalità. Nella maggior parte dei casi, a un dispositivo è associato più ID hardware. In genere, un elenco di ID hardware viene ordinato dalla maggior parte al meno adatto per un dispositivo. Ad esempio, l'elenco di 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 (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>

Questo è il formato più comune per i singoli dispositivi PnP segnalati al gestore 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 può usare un formato personalizzato. Per informazioni sui formati di ID hardware, vedere la specifica hardware per tali bus.

Il numero di caratteri di un ID hardware, escluso un carattere di terminazione NULL, deve essere minore di MAX_DEVICE_ID_LEN. Questo vincolo si applica alla somma delle lunghezze di tutti i campi e dei \\ 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 ROOT\SYSTEM esempio possono essere in conflitto e generano 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, invece di usare ROOT\USB o ROOT\SYSTEM" usare ROOT\[COMPANYNAME]\[DEVICENAME]. Quindi, prima di eseguire l'installazione, verificare se devnode è già presente.

Ottenere l'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. Selezionare il dispositivo con il pulsante destrodelo e selezionare Proprietà.

  4. Selezionare la scheda Dettagli.

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

È anche possibile ottenere l'elenco di ID hardware a livello di codice recuperando la proprietà DEVPKEY_Device_HardwareIds in un dispositivo. Ad esempio, tale proprietà può essere recuperata con API come IoGetDevicePropertyData, SetupDiGetDeviceProperty o CM_Get_DevNode_Property.

L'elenco di ID hardware recuperati da questa routine è un valore REG_MULTI_SZ . Il numero massimo di caratteri in un elenco hardware, incluso un carattere di terminazione 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

Di seguito è riportato un esempio di identificatore per un dispositivo PCI:

PCI\VEN_1000&DEV_0001&SUBSYS_00000000&REV_02