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 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:

  1. Öppna Enhetshanteraren.
  2. Hitta enheten i trädet.
  3. Högerklicka på enheten och välj Egenskaper.
  4. Välj fliken Detaljer.
  5. 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