Lưu ý
Cần có ủy quyền mới truy nhập được vào trang này. Bạn có thể thử đăng nhập hoặc thay đổi thư mục.
Cần có ủy quyền mới truy nhập được vào trang này. Bạn có thể thử thay đổi thư mục.
A hardware ID is a vendor-defined identification string that Windows uses to match a device to a driver package. A hardware ID identifies a device and indicates that any driver package that declares it can work with a device that has that ID for some degree of functionality. In most cases, a device has more than one hardware ID associated with it. Typically, a list of hardware IDs is sorted from most to least suitable for a device. For example, the list of conceptual hardware IDs for a device might look like:
<Product X made by company Y with firmware revision Z>
<Product X made by company Y that is a device of type W>
Where the actual hardware IDs would represent those concepts using strings that follow the format requirements of a hardware ID.
Creating a hardware ID for a device
Hardware IDs are reported to the Plug and Play Manager (PnP) by a device's enumerator (its bus driver). Typically, when the author of a bus driver needs to create a new hardware ID for a device it reports to PnP, it uses one of the following generic formats:
<enumerator>\<enumerator-specific-device-ID>
This format is the most common for individual PnP devices reported to the Plug and Play (PnP) manager by a single enumerator.
\*<generic-device-ID>
The asterisk indicates that more than one enumerator supports the device, such as ISAPNP and the BIOS.
<device-class-specific-ID>
For more information, see Generic Identifiers.
An existing device class with its own established naming convention might use a custom format. For information about their hardware ID formats, see the hardware specification for such buses.
The number of characters of a hardware ID, excluding a NULL terminator, must be less than MAX_DEVICE_ID_LEN
. This constraint applies to the sum of the lengths of all the fields and any \\
field separators in a hardware ID. For more information, see the Operations section of IRP_MN_QUERY_ID.
Hardware IDs for root enumerated devices
Root enumerated devices are special in that they can be created using APIs where a hardware ID can be provided. Root enumerated devices with hardware IDs sharing generic namespaces such as ROOT\SYSTEM
might conflict and result in a yellow-bang error icon in Device Manager when updating Windows.
You can prevent this error by using a unique namespace for each driver that has a root enumerated device. For a USB or system device, instead of using ROOT\USB
or ROOT\SYSTEM"
use ROOT\[COMPANYNAME]\[DEVICENAME]
. Then, before installing, check to see if the devnode is already present.
Obtaining the list of hardware IDs for a device
To find the list of hardware IDs for a given device, follow these steps:
- Open Device Manager.
- Find the device in the tree.
- Right-select the device and select Properties.
- Select the Details tab.
- In the Property drop-down, select Hardware Ids or Compatible Ids.
The list of hardware IDs can also be obtained programmatically by retrieving the DEVPKEY_Device_HardwareIds property on a device. For example, that property can be retrieved with APIs such as IoGetDevicePropertyData, SetupDiGetDeviceProperty, or CM_Get_DevNode_Property.
The list of hardware IDs that this routine retrieves is a REG_MULTI_SZ value. The maximum number of characters in a hardware list, including a NULL terminator after each hardware ID and a final NULL terminator, is REGSTR_VAL_MAX_HCID_LEN
. The maximum possible number of IDs in a list of hardware IDs is 64.
Examples of Hardware IDs
Here's an example of a generic identifier for a PnP device:
root\*PNP0F08
Here's an example of an identifier for a PCI device:
PCI\VEN_1000&DEV_0001&SUBSYS_00000000&REV_02