在 Windows 中,如果你去 DeviceManager -> 选择设备(如 aa 键盘) -> 转到详细信息 -> 属性列表:
Device description
Hardware Ids
Compatible Ids
Device class
Device class guid
Driver key
ConfigFlags
... etc
我在哪里可以找到这些属性中的每一个的含义?
从MSDN 文档中,您将找到设备实例 ID 的描述,并链接到其他描述。此链接简要介绍了其中一些,如下所示:
设备 ID
设备 ID 是供应商定义的标识字符串,它是安装程序用于将设备与 INF 文件匹配的最具体的 ID。一台设备只有一个设备 ID。设备 ID 与硬件 ID 具有相同的格式。如果枚举器报告设备的硬件 ID 列表,则设备 ID 应该是列表中的第一个硬件 ID。
PnP 管理器使用设备 ID 在设备枚举器的注册表项下为设备创建子项。
要获取设备 ID,请使用 IRP_MN_QUERY_ID 请求并将 Parameters.QueryId.IdType 字段设置为 BusQueryDeviceID。
硬件 ID
硬件 ID 是供应商定义的标识字符串,安装程序用于将设备与 INF 文件匹配。在大多数情况下,设备都有与其相关联的硬件 ID 列表。(但是,也有例外 - 请参阅 1394 设备的标识符)。列表中的第一个硬件 ID 应为设备 ID,其余 ID 应按适用性降序排列。
硬件 ID 具有以下通用格式之一:
<enumerator>\<enumerator-specific-device-ID>
这是单个枚举器向 PnP 管理器报告的单个 PnP 设备的最常见格式。新的枚举器应使用此格式或以下格式。*<enumerator-specific-ID>
星号表示设备受多个枚举器支持,例如 ISAPNP 和 BIOS。<device-class-specific-ID>
已建立自己的命名约定的现有设备类可能使用自定义格式。有关其硬件 ID 格式的信息,请参阅此类总线的硬件规范。新的枚举器不应该使用这种格式。硬件 ID 的字符数(不包括 NULL 终止符)必须小于 MAX_LENGTH_LEN。此约束适用于硬件 ID 中所有字段和任何“\”字段分隔符的长度总和。此外,当实例ID与硬件ID连接以创建设备实例ID时,硬件ID和实例ID的长度进一步受限于设备实例ID的最大可能长度。要获取设备的硬件 ID 列表,请调用 IoGetDeviceProperty,并将 DeviceProperty 参数设置为 DevicePropertyHardwareID。此例程检索的硬件 ID 列表是 REG_MULTI_SZ 值。硬件列表中的最大字符数(包括每个硬件 ID 后面的 NULL 终止符和最终的 NULL 终止符)为 REGSTR_VAL_MAX_HCID_LEN。硬件 ID 列表中的最大可能 ID 数为 MAX_HCID_COUNT。
硬件 ID 示例
在下文中,第一个示例是 PnP 设备的通用标识符,第二个示例是 PCI 设备的标识符:
根*PNP0F08
PCI\VEN_1000&DEV_0001&SUBSYS_00000000&REV_02
兼容的 ID
兼容 ID 是供应商定义的标识字符串,安装程序用于将设备与 INF 文件匹配。设备可以与一个兼容 ID 列表相关联。应按适用性递减的顺序列出兼容的 ID。如果安装程序找不到与设备的硬件 ID 之一匹配的 INF 文件,它会使用兼容的 ID 来查找 INF 文件。兼容 ID 与硬件 ID 具有相同的格式;但是,兼容 ID 通常比硬件 ID 更通用。
如果供应商提供的 INF 文件为驱动程序节点指定兼容 ID,则供应商应确保其 INF 文件可以支持与兼容 ID 匹配的所有硬件。由于与兼容 ID 的匹配不如与硬件 ID 的匹配强,因此 PnP 管理器会在处理 INF 文件之前提示用户进行确认。
要获取设备的兼容 ID 列表,请调用 IoGetDeviceProperty,并将 DeviceProperty 参数设置为 DevicePropertyCompatibleID。此例程检索的兼容 ID 列表是 REG_MULTI_SZ 值。兼容 ID 列表中的最大字符数为 REGSTR_VAL_MAX_HCID_LEN,包括每个兼容 ID 之后的 NULL 终止符和最终的 NULL 终止符。兼容 ID 列表中的最大可能 ID 数为 MAX_HCID_COUNT。
实例 ID
实例 ID 是设备标识字符串,用于将设备与机器上相同类型的其他设备区分开来。实例 ID 包含序列号信息(如果底层总线支持)或某种位置信息。字符串不能包含任何“\”字符;否则,字符串的通用格式是特定于总线的。
实例 ID 的字符数(不包括 NULL 终止符)必须小于 MAX_LENGTH_LEN。此外,当实例ID与设备ID连接以创建设备实例ID时,设备ID和实例ID的长度进一步受限于设备实例ID的最大可能长度。
设备的 DEVICE_CAPABILITIES 结构的 UniqueID 成员指示总线提供的实例 ID 在整个系统中是否唯一,如下所示:
如果 UniqueID 为 FALSE,则总线提供的设备实例 ID 仅对设备的总线是唯一的。PnP 管理器修改总线提供的实例 ID,并将其与相应的设备 ID 结合,以创建系统中唯一的设备实例 ID。如果 UniqueID 为 TRUE,则由总线提供的设备 ID 和实例 ID 组成的设备实例 ID 唯一地标识系统中的一个设备。实例 ID 在系统引导期间保持不变。
要获取设备的总线提供的实例 ID,请使用 IRP_MN_QUERY_ID 请求并将 Parameters.QueryId.IdType 成员设置为 BusQueryInstanceID。
设备实例 ID
设备实例 ID 是系统提供的设备标识字符串,用于唯一标识系统中的设备。PnP 管理器为系统设备树中的每个设备节点分配一个设备实例 ID。
此字符串的格式由连接到设备 ID 的实例 ID 组成,如下所示:
\ 设备实例 ID 的字符数(不包括 NULL 终止符)必须小于 MAX_LENGTH_LEN。此约束适用于所有字段的长度总和以及设备 ID 和实例特定 ID 字段之间的“\”字段分隔符。设备实例 ID 在系统引导期间保持不变。
以下是连接到 PCI 设备的设备 ID 的实例 ID ("1&08") 的示例:
PCI\VEN_1000&DEV_0001&SUBSYS_00000000&REV_02\1&08
其中大部分是通过“Setup API”公开的。某些数据可能是特定于驱动程序的,在这种情况下,您必须询问驱动程序编写者。您列出的都是标准 Microsoft 属性。例如,“设备类”描述了它是什么类型的设备,例如。鼠标/键盘/存储/显卡/音频/...