ID dell'hardware
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 dal più adatto 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 riportati al Plug and Play Manager (PnP) dall'enumeratore di un dispositivo (il 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, usa uno dei formati generici seguenti:
<enumerator>\<enumerator-specific-device-ID>
Questo formato è il 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 più enumeratori supportano il dispositivo, ad esempio ISAPNP e BIOS.
<device-class-specific-ID>
Per altre informazioni, vedere Identificatori Generici.
Una classe di dispositivo esistente con la propria convenzione di denominazione stabilita potrebbe 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 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 ulteriori informazioni, vedere la sezione operazioni di IRP_MN_QUERY_ID.
ID hardware per dispositivi enumerati alla radice
I dispositivi enumerati dalla radice sono speciali in quanto possono essere creati usando le API in cui è possibile fornire un ID hardware. I dispositivi root enumerati con ID hardware che condividono spazi dei nomi generici, come ROOT\SYSTEM
, potrebbero entrare in conflitto e risultare in un'icona di errore gialla in Gestione dispositivi durante l'aggiornamento di Windows.
È possibile evitare questo errore utilizzando uno spazio dei nomi univoco per ciascun driver che ha un dispositivo enumerato come radice. Per un dispositivo USB o di sistema, anziché usare ROOT\USB
o ROOT\SYSTEM"
usare ROOT\[COMPANYNAME]\[DEVICENAME]
. Quindi, prima di eseguire l'installazione, verificare se 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:
- Aprire Gestione dispositivi.
- Trovare il dispositivo nell'albero.
- Selezionare il dispositivo con il pulsante destro del computer e selezionare Proprietà.
- Selezionare la scheda Dettagli.
- Nell'elenco a discesa proprietà , selezionare ID hardware o ID compatibili .
L'elenco degli ID hardware può essere ottenuto anche a livello di codice recuperando la proprietà DEVPKEY_Device_HardwareIds in un dispositivo. Ad esempio, tale proprietà può essere recuperata con API come IoGetDevicePropertyData, SetupDiGetDevicePropertyo CM_Get_DevNode_Property.
L'elenco degli ID hardware che questa routine recupera è 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
Di seguito è riportato un esempio di identificatore di per un dispositivo PCI:
PCI\VEN_1000&DEV_0001&SUBSYS_00000000&REV_02