Dela via


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. Det anger att alla drivrutinspaket som deklarerar att det 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. 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 enumeratör, det vill säga 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 Plug and Play-hanteraren 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 Åtgärdi 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:t som delar allmänna namnområden, till exempel ROOT\SYSTEM, kan vara i konflikt. Resultatet är en gul varningstriangel 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, använd ROOT\[COMPANYNAME]\[DEVICENAME] i stället för ROOT\USB eller ROOT\SYSTEM. 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 enhet:

  1. I Windows-sökning anger du och väljer Enhetshanteraren.
  2. Leta upp enheten i trädet i Enhetshanteraren.
  3. Högerklicka på enheten och välj Egenskaper.
  4. Välj fliken Detaljer.
  5. Som Egenskap väljer du Maskinvaru-ID eller Kompatibla ID:t.

Du kan också hämta listan över maskinvaru-ID:n 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