Hardware-ID
Een hardware-id is een door de leverancier gedefinieerde identificatietekenreeks die Windows gebruikt om een apparaat te koppelen aan een stuurprogrammapakket. Een hardware-id identificeert een apparaat en geeft aan dat elk stuurprogrammapakket dat het declareert, kan werken met een apparaat met die id voor een bepaalde mate van functionaliteit. In de meeste gevallen is aan een apparaat meer dan één hardware-id gekoppeld. Normaal gesproken wordt een lijst met hardware-id's gesorteerd van het meest naar het minst geschikt voor een apparaat. De lijst met conceptuele hardware-id's voor een apparaat kan er bijvoorbeeld als volgt uitzien:
<Product X made by company Y with firmware revision Z>
<Product X made by company Y that is a device of type W>
Waar de werkelijke hardware-id's deze concepten vertegenwoordigen met behulp van tekenreeksen die voldoen aan de indelingsvereisten van een hardware-id.
Een hardware-id voor een apparaat maken
Hardware-id's worden gerapporteerd aan de Plug and Play Manager (PnP) door de enumerator van een apparaat (het busstuurprogramma). Wanneer de auteur van een busstuurprogramma doorgaans een nieuwe hardware-id moet maken voor een apparaat dat wordt gerapporteerd aan PnP, wordt een van de volgende algemene indelingen gebruikt:
<enumerator>\<enumerator-specific-device-ID>
Deze indeling is de meest voorkomende voor afzonderlijke PnP-apparaten die door één enumerator worden gerapporteerd aan de Plug and Play-manager (PnP).
\*<generic-device-ID>
Het sterretje geeft aan dat meer dan één enumerator het apparaat ondersteunt, zoals ISAPNP en het BIOS.
<device-class-specific-ID>
Zie Algemene id'svoor meer informatie.
Een bestaande apparaatklasse met een eigen gevestigde naamconventie kan een aangepaste indeling gebruiken. Zie de hardwarespecificatie voor dergelijke bussen voor informatie over hun hardware-id-indelingen.
Het aantal tekens van een hardware-id, met uitzondering van een NULL-eindteken, moet kleiner zijn dan MAX_DEVICE_ID_LEN
. Deze beperking is van toepassing op de som van de lengte van alle velden en eventuele \\
veldscheidingstekens in een hardware-id. Zie de sectie Operations van IRP_MN_QUERY_IDvoor meer informatie.
Hardware-ID's voor root-geënumereerde apparaten
Root-genummerde apparaten zijn bijzonder omdat ze kunnen worden gemaakt met behulp van API's waarbij een hardware-ID kan worden opgegeven. Geroote geordende apparaten met hardware-id's die algemene naamruimten delen, zoals ROOT\SYSTEM
, kunnen conflicteren en resulteren in een gele uitroeptekenfoutpictogram in Apparaatbeheer bij het bijwerken van Windows.
U kunt deze fout voorkomen door een unieke naamruimte te gebruiken voor elk stuurprogramma met een geïnventariseerd basisapparaat. Voor een USB- of systeemapparaat gebruikt u ROOT\[COMPANYNAME]\[DEVICENAME]
in plaats van ROOT\USB
of ROOT\SYSTEM"
. Controleer vervolgens voordat u installeert of het devnode al aanwezig is.
De lijst met hardware-id's voor een apparaat verkrijgen
Volg deze stappen om de lijst met hardware-id's voor een bepaald apparaat te vinden:
- Open Apparaatbeheer.
- Zoek het apparaat in de boomstructuur.
- Selecteer met de rechtermuisknop het apparaat en selecteer Eigenschappen.
- Selecteer het tabblad Details.
- Selecteer in de vervolgkeuzelijst eigenschaphardware-id's of compatibele id's.
De lijst met hardware-id's kan ook programmatisch worden verkregen door de eigenschap DEVPKEY_Device_HardwareIds op een apparaat op te halen. Deze eigenschap kan bijvoorbeeld worden opgehaald met API's zoals IoGetDevicePropertyData, SetupDiGetDevicePropertyof CM_Get_DevNode_Property.
De lijst met hardware-id's die door deze routine worden opgehaald, is een REG_MULTI_SZ waarde. Het maximum aantal tekens in een hardwarelijst, inclusief een NULL-eindteken na elke hardware-id en een laatste NULL-eindteken, wordt REGSTR_VAL_MAX_HCID_LEN
. Het maximum aantal id's in een lijst met hardware-id's is 64.
Voorbeelden van hardware-id's
Hier volgt een voorbeeld van een algemene id voor een PnP-apparaat:
root\*PNP0F08
Hier volgt een voorbeeld van een -id voor een PCI-apparaat:
PCI\VEN_1000&DEV_0001&SUBSYS_00000000&REV_02