容器 ID 的生成方式
从 Windows 7 开始,即插即用 (PnP) 管理器通过以下三种机制之一为设备节点 (devnode) 生成容器 ID:
总线驱动程序提供容器 ID。
向开发节点分配容器 ID 时,PnP 管理器首先检查开发节点的总线驱动程序是否可以提供容器 ID。 总线驱动程序通过参数.QueryId.IdType 字段设置为 BusQueryContainerID的IRP_MN_QUERY_ID请求提供容器 ID。
如果总线驱动程序想要提供容器 ID,它可以获取嵌入在物理设备硬件中的正版容器 ID,或使用设备硬件中的特定于总线的唯一 ID 来生成容器 ID。 特定于总线的唯一 ID 的一些示例包括设备的序列号或媒体访问控制 (设备固件中的 MAC) 地址。
注意
独立硬件供应商 (IHV) 负责总线驱动程序报告容器 ID 的唯一性。
有关详细信息,请参阅 从 Bus-Specific 唯一 ID 生成的容器 ID。
PnP 管理器通过可移动设备功能生成容器 ID。
如果总线驱动程序无法为其枚举的开发节点提供容器 ID,则 PnP 管理器使用可移动设备功能为设备枚举的所有开发节点生成容器 ID。 总线驱动程序报告此设备功能以响应 IRP_MN_QUERY_CAPABILITIES 请求。
有关详细信息,请参阅 从可移动设备功能生成的容器 ID。
PnP 管理器通过可移动设备功能的替代生成容器 ID。
注意
在 Windows 10 中,DPWS 设备将始终使用此方法为设备生成容器 ID。
尽管替代机制不会更改可移动设备功能的值,但它会强制 PnP 管理器在为设备生成容器 ID 时使用替代设置,而不是使用可移动设备功能的值。
例如,如果可移动设备功能的替代指定设备是可移动的,则 PnP 管理器会为设备枚举的所有开发节点生成容器 ID。 无论设备是否将自身报告为可移动设备,都会执行此操作。
IHV 可以使用替代设备报告的可移动设备功能的键填充注册表。 对于不支持可移动设备功能或错误报告该设备功能的旧设备,此替代机制非常有用。
有关详细信息,请参阅 从可移动设备功能替代生成的容器 ID。
除了这些方法,系统还使用 ACPI BIOS 对象设置来指定设备容器分组。 有关详细信息,请参阅 使用 ACPI 进行设备容器分组。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈