容器 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 进行设备容器分组