Hardware-ID
Eine Hardware-ID ist eine vom Hersteller definierte Identifikationszeichenfolge, die Windows zum Abgleichen eines Geräts mit einem Treiberpaketverwendet. Eine Hardware-ID identifiziert ein Gerät und gibt an, dass jedes Treiberpaket, das es deklariert, mit einem Gerät arbeiten kann, das über diese ID verfügt, um einen gewissen Grad an Funktionalität zu erhalten. In den meisten Fällen ist einem Gerät mehr als eine Hardware-ID zugeordnet. In der Regel wird eine Liste der Hardware-IDs für ein Gerät von den am besten bis am wenigsten geeigneten sortiert. Die Liste der konzeptionellen Hardware-IDs für ein Gerät könnte z. B. wie folgt aussehen:
<Product X made by company Y with firmware revision Z>
<Product X made by company Y that is a device of type W>
Wenn die tatsächlichen Hardware-IDs diese Konzepte mithilfe von Zeichenfolgen darstellen würden, die den Formatanforderungen einer Hardware-ID entsprechen.
Erstellen einer Hardware-ID für ein Gerät
Hardware-IDs werden dem Plug and Play Manager (PnP) durch den Enumerator eines Geräts (dessen -Bustreiber) gemeldet. Wenn der Autor eines Bustreibers eine neue Hardware-ID für ein Gerät erstellen muss, das er an PnP meldet, verwendet er in der Regel eines der folgenden generischen Formate:
<enumerator>\<enumerator-specific-device-ID>
Dieses Format ist das gängigste für einzelne PnP-Geräte, die dem Plug-and-Play-Manager (PnP) von einem einzelnen Enumerator gemeldet werden.
\*<generic-device-ID>
Das Sternchen gibt an, dass mehr als ein Enumerator das Gerät unterstützt, z. B. ISAPNP und das BIOS.
<device-class-specific-ID>
Weitere Informationen finden Sie unter Generische Bezeichner.
Eine vorhandene Geräteklasse mit einer eigenen etablierten Benennungskonvention kann ein benutzerdefiniertes Format verwenden. Informationen zu ihren Hardware-ID-Formaten finden Sie in der Hardwarespezifikation für solche Busse.
Die Anzahl der Zeichen einer Hardware-ID, mit Ausnahme eines NULL-Terminators, muss kleiner als MAX_DEVICE_ID_LEN
sein. Diese Einschränkung gilt für die Summe der Längen aller Felder und aller \\
-Feldtrennzeichen in einer Hardware-ID. Weitere Informationen finden Sie im Abschnitt Vorgänge von IRP_MN_QUERY_ID.
Hardware-IDs für aufgezählte Stammgeräte
Aufgezählte Stammgeräte sind insofern besonders, als sie mithilfe von APIs erstellt werden können, bei denen eine Hardware-ID bereitgestellt werden kann. Aufgezählte Stammgeräte mit Hardware-IDs, die generische Namespaces, wie zum Beispiel ROOT\SYSTEM
, gemeinsam nutzen, können zu Konflikten führen und bei der Aktualisierung von Windows ein gelbes Warnsymbol im Geräte-Manager verursachen.
Sie können diesen Fehler verhindern, indem Sie für jeden Treiber, der ein root-enumeriertes Gerät hat, einen eindeutigen Namespace verwenden. Verwenden Sie für ein USB- oder Systemgerät anstelle von ROOT\USB
, oder ROOT\SYSTEM"
verwenden Sie ROOT\[COMPANYNAME]\[DEVICENAME]
. Überprüfen Sie dann vor der Installation, ob „devnode” bereits vorhanden ist.
Abrufen der Liste der Hardware-IDs für ein Gerät
Führen Sie die folgenden Schritte aus, um die Liste der Hardware-IDs für ein bestimmtes Gerät zu finden:
- Öffnen Sie den Geräte-Manager.
- Suchen Sie das Gerät in der Struktur.
- Klicken Sie mit der rechten Maustaste auf das Gerät, und wählen Sie Eigenschaften aus.
- Wählen Sie die Registerkarte Details aus.
- Wählen Sie in der Dropdownliste Eigenschaft die Option Hardware-IDs oder Compatible-ID aus.
Die Liste der Hardware-IDs kann auch programmgesteuert abgerufen werden, indem die DEVPKEY_Device_HardwareIds-Eigenschaft eines Geräts ausgelesen wird. Diese Eigenschaft kann beispielsweise mit APIs wie IoGetDevicePropertyData-, SetupDiGetDeviceProperty-oder CM_Get_DevNode_Propertyabgerufen werden.
Die von dieser Routine abgerufene Liste der Hardware-IDs ist ein REG_MULTI_SZ-Wert. Die maximale Anzahl von Zeichen in einer Hardwareliste, einschließlich eines NULL-Abschlusszeichens nach jeder Hardware-ID und einem endgültigen NULL-Abschlusszeichen, ist REGSTR_VAL_MAX_HCID_LEN
. Die maximale Anzahl von IDs in einer Liste der Hardware-IDs beträgt 64.
Beispiele für Hardware-IDs
Hier sehen Sie ein Beispiel für einen generischen Bezeichner für ein PnP-Gerät.
root\*PNP0F08
Hier ist ein Beispiel für einen Bezeichner für ein PCI-Gerät:
PCI\VEN_1000&DEV_0001&SUBSYS_00000000&REV_02