硬件 ID
硬件 ID 是一个供应商定义的标识字符串,Windows 使用它来将设备匹配到 驱动程序包。 硬件 ID 标识设备,并表明任何声明它的驱动程序包都可以在某种程度上支持具有该 ID 的设备。 在大多数情况下,设备具有多个与之关联的硬件 ID。 通常,硬件 ID 列表按照设备的适用性从最适合到最不适合排序。 例如,设备的概念硬件 ID 列表可能如下所示:
<Product X made by company Y with firmware revision Z>
<Product X made by company Y that is a device of type W>
其中,实际硬件 ID 将使用遵循硬件 ID 格式要求的字符串来表示这些概念。
为设备创建硬件 ID
设备 枚举器(其 总线驱动程序)向即插即用管理器(PnP)报告硬件 ID。 通常,当总线驱动程序的作者需要为它向 PnP 报告的设备创建新的硬件 ID 时,它会使用以下通用格式之一:
<enumerator>\<enumerator-specific-device-ID>
此格式是单个枚举器向即插即用(PnP)管理器报告的单个 PnP 设备最常见的格式。
\*<generic-device-ID>
星号指示多个枚举器支持设备,例如 ISAPNP 和 BIOS。
<device-class-specific-ID>
有关详细信息,请参阅 泛型标识符。
具有自己的已建立命名约定的现有设备类可能使用自定义格式。 有关其硬件 ID 格式的信息,请参阅此类总线的硬件规范。
硬件 ID(不包括 NULL 终止符)的字符数必须小于 MAX_DEVICE_ID_LEN
。 此约束适用于硬件 ID 中所有字段的长度和任何 \\
字段分隔符的总和。 有关详细信息,请参阅 IRP_MN_QUERY_ID 的“操作”部分。
根枚举设备的硬件 ID
根枚举设备很特别,因为可以使用提供硬件 ID 的 API 创建这些设备。 具有共享泛型命名空间(如 ROOT\SYSTEM
)的硬件 ID 的根枚举设备可能会冲突,并在更新 Windows 时导致设备管理器中显示黄色感叹号图标。
对于具有根枚举设备的每个驱动程序,可以使用唯一的命名空间来防止此错误。 对于 USB 或系统设备,不要使用 ROOT\USB
或 ROOT\SYSTEM"
,而是应使用 ROOT\[COMPANYNAME]\[DEVICENAME]
。 然后,在安装之前,检查 devnode 是否已存在。
获取设备的硬件 ID 列表
若要查找给定设备的硬件 ID 列表,请执行以下步骤:
- 打开设备管理器。
- 在树中找到该设备。
- 右键单击该设备并选择“属性”。
- 选择“详细信息”选项卡。
- 在 属性 下拉菜单中,选择 硬件标识符 或 兼容标识符。
还可以通过检索设备上的 DEVPKEY_Device_HardwareIds 属性以编程方式获取硬件 ID 列表。 例如,可以使用 IoGetDevicePropertyData、SetupDiGetDeviceProperty或 CM_Get_DevNode_Property等 API 检索该属性。
此例程检索到的硬件 ID 列表是一个 REG_MULTI_SZ 值。 硬件列表中的最大字符数(包括每个硬件 ID 之后的 NULL 终止符和最终的 NULL 终止符)REGSTR_VAL_MAX_HCID_LEN
。 硬件 ID 列表中可能的最大 ID 数为 64。
硬件 ID 的示例
下面是 PnP 设备的 泛型标识符 的示例:
root\*PNP0F08
这是一个 PCI 设备的
PCI\VEN_1000&DEV_0001&SUBSYS_00000000&REV_02