硬件 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

硬件 ID 由设备的枚举器 (其总线驱动程序) (PnP) 报告给即插即用管理器。 通常,当总线驱动程序的作者需要为设备创建新的硬件 ID 时,它将向 PnP 报告,它将使用以下通用格式之一:

<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\[COMPANYNAME]\[DEVICENAME],而不是使用 ROOT\USBROOT\SYSTEM"。 然后,在安装之前检查 devnode 是否已存在。

获取设备的硬件 ID 列表

若要查找给定设备的硬件 ID 列表,请执行以下步骤:

  1. 打开“设备管理器”。

  2. 在树中找到该设备。

  3. 右键单击设备,然后选择“ 属性”。

  4. 选择“详细信息”选项卡。

  5. 在“属性”下拉列表中,选择“硬件 ID”或“兼容 ID”。

还可以通过检索设备上的 DEVPKEY_Device_HardwareIds 属性以编程方式获取硬件 ID 列表。 例如,可以使用 IoGetDevicePropertyDataSetupDiGetDevicePropertyCM_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