Maskinvaru-ID
Ett maskinvaru-ID är en leverantörsdefinierad identifieringssträng som Windows använder för att matcha en enhet med ett drivrutinspaket. Ett maskinvaru-ID identifierar en enhet och anger att alla drivrutinspaket som deklarerar att den kan fungera med en enhet som har det ID:t för en viss funktionalitet. I de flesta fall har en enhet mer än ett maskinvaru-ID kopplat till sig. Vanligtvis sorteras en lista över maskinvaru-ID:n från de flesta till minst lämpliga för en enhet. Till exempel kan listan över konceptuella maskinvaru-ID:n för en enhet se ut så här:
<Product X made by company Y with firmware revision Z>
<Product X made by company Y that is a device of type W>
Där de faktiska maskinvaru-ID:na skulle representera dessa begrepp med hjälp av strängar som följer formatkraven för ett maskinvaru-ID.
Skapa ett maskinvaru-ID för en enhet
Maskinvaru-ID:n rapporteras till Plug and Play Manager (PnP) av en enhets enumerator (dess bussdrivrutin). När en författare av en drivrutin för en buss behöver skapa ett nytt maskinvaru-ID för en enhet som rapporteras till PnP använder den vanligtvis något av följande generiska format:
<enumerator>\<enumerator-specific-device-ID>
Det här formatet är det vanligaste för enskilda PnP-enheter som rapporteras till PnP-hanteraren (Plug and Play) av en enda uppräknare.
\*<generic-device-ID>
Asterisken anger att mer än en uppräknare stöder enheten, till exempel ISAPNP och BIOS.
<device-class-specific-ID>
Mer information finns i allmänna identifierare.
En befintlig enhetsklass med en egen etablerad namngivningskonvention kan använda ett anpassat format. Information om deras maskinvaru-ID-format finns i maskinvaruspecifikationen för sådana bussar.
Antalet tecken i ett maskinvaru-ID, exklusive en NULL-avslutare, måste vara mindre än MAX_DEVICE_ID_LEN
. Den här begränsningen gäller för summan av längden på alla fält och eventuella \\
fältavgränsare i ett maskinvaru-ID. Mer information finns i avsnittet Operations i IRP_MN_QUERY_ID.
Maskinvaru-ID för rot-enumererade enheter
Rotuppräknade enheter är speciella eftersom de kan skapas med hjälp av API:er där ett maskinvaru-ID kan tillhandahållas. Rotuppräknade enheter med maskinvaru-ID:n som delar generiska namnrymder, såsom ROOT\SYSTEM
, kan hamna i konflikt och leda till ett gult utropstecken som felikon i Enhetshanteraren vid uppdatering av Windows.
Du kan förhindra det här felet genom att använda ett unikt namnområde för varje drivrutin som har en rotuppräknad enhet. För en USB- eller systemenhet, i stället för att använda ROOT\USB
eller ROOT\SYSTEM"
använda ROOT\[COMPANYNAME]\[DEVICENAME]
. Kontrollera sedan innan du installerar om devnode redan finns.
Hämta listan över maskinvaru-ID:n för en enhet
Följ dessa steg för att hitta listan över maskinvaru-ID:n för en viss enhet:
- Öppna Enhetshanteraren.
- Hitta enheten i trädet.
- Högerklicka på enheten och välj Egenskaper.
- Välj fliken Detaljer.
- I rullgardinsmenyn Egenskap väljer du antingen maskinvaru-ID eller kompatibilitets-ID.
Listan över maskinvaru-ID:n kan också hämtas programmatiskt genom att hämta egenskapen DEVPKEY_Device_HardwareIds på en enhet. Den egenskapen kan till exempel hämtas med API:er som IoGetDevicePropertyData, SetupDiGetDevicePropertyeller CM_Get_DevNode_Property.
Listan över maskinvaru-ID:t som den här rutinen hämtar är ett REG_MULTI_SZ värde. Det maximala antalet tecken i en maskinvarulista, inklusive en NULL-avslutare efter varje maskinvaru-ID och en slutlig NULL-avslutare, är REGSTR_VAL_MAX_HCID_LEN
. Det maximala antalet ID:ar i en lista över maskinvaru-ID:t är 64.
Exempel på maskinvaru-ID:t
Här är ett exempel på en generisk identifierare för en PnP-enhet:
root\*PNP0F08
Här är ett exempel på en identifierare för en PCI-enhet:
PCI\VEN_1000&DEV_0001&SUBSYS_00000000&REV_02