通过可移动设备功能重写生成的容器 ID
从 Windows 7 开始,新设备应提供特定于总线的唯一 ID (,如从Bus-Specific唯一 ID) 生成的容器 ID 中所述。
或者,设备和总线驱动程序必须正确 (设置可移动设备功能,如 从可移动设备功能) 生成的容器 ID 中所述。 有关可移动设备功能的详细信息,请参阅 可移动设备功能的概述。
Windows 7 及更高版本的 Windows还支持替代报告的可移动设备功能的机制。 此机制对于报告可移动设备功能的旧设备非常有用。
尽管替代机制不会更改可移动设备功能的值,但它强制 PnP 管理器使用替代设置,而不是为设备生成容器 ID 时可移动设备功能的值。
通过此替代机制,可以通过基于注册表的方法生成容器 ID。 一旦为设备最顶层 (父) 设备节点 (开发节点 生成容器 ID 后,设备的每个子开发) 节点都会通过 从可移动设备功能生成的容器 ID 中所述的启发式继承同一容器 ID。
替代机制是基于注册表的查阅表,由映射到特定设备的注册表项组成。 此替代表在 DeviceOverrides 注册表项下维护,由以下注册表项和子项组成。
表级别 | 注册表项/子项名称 | 说明 |
---|---|---|
1 |
所有可移动设备功能替代的父密钥。 |
|
2 |
指定可移动设备功能覆盖应用到的设备 的硬件 ID 。 此子项的名称是实际的硬件 ID,所有反斜杠 ('') 字符替换为数字 ('#') 字符。 |
|
2 |
指定可移动设备功能覆盖应用到的设备兼容 ID 。 此子项的名称是实际的硬件 ID,所有反斜杠 ('') 字符替换为数字 ('#') 字符。 |
|
3 |
指定只有设备父设备节点的位置路径 (开发节点) 才会应用可移动设备功能替代。 |
|
3 |
指定设备子开发节点的位置路径将应用可移动设备功能替代。
注意 指定的设备的父开发节点不受可移动设备功能替代的影响,除非还指定 LocationPaths 注册表子项或为父开发节点指定 ChildLocationPaths 注册表子项。
|
|
4 |
指定可移动设备功能替代应用到的开发节点的离散位置路径。 此子项的名称是计算机上安装的设备单个开发节点实例的实际位置路径。 |
|
4 |
指定可移动设备功能替代适用于指定设备的所有开发节点。 |
在 LocationPath 和 * 注册表子项中,DWORD 值 (可移动) 指定是否将适用的开发节点视为可移动 (1) 或不可移动 (0) 。
示例 1
下面显示了与 HardwareID 注册表子项匹配的开发节点的设备替代,以及通过 LocationPaths 注册表子项指定的位置路径。
在此示例中,替代将禁用可移动设备功能,并应用于所有 硬件 ID 为 USB\VID_1234 PID_5678的位置路径 PCIROOT (& 0) #PCI (102) #USBROOT (0) #USB (1) 。
下面是此重写的注册表表格式示例。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceOverrides
USB#VID_1234&PID_5678
LocationPaths
PCIROOT(0)#PCI(102)#USBROOT(0)#USB(1)
Removable=0
在此示例中, USB#VID_1234&PID_5678
是 HardwareID 注册表子项的名称,是 PCIROOT(0)#PCI(102)#USBROOT(0)#USB(1)
LocationPath 注册表子项的名称。
这会替代更改 即插即用 (PnP) 管理器对设备拓扑的解释。 请注意,硬件 ID 值为 USB\VID_1234& PID_5678的开发节点在注册表中标记为不可移动。 不会为此开发节点生成新的容器 ID,因为 PnP 管理器将开发节点解释为无法从其父级移动。 相反,USB\VID_1234& PID_5678 (及其所有子级) 继承其父级容器 ID (ContainerID {A}) 。
此替代的结果是单个设备分组,因为树中的所有开发节点具有相同的容器 ID。 设备 USB\VID_1234& PID_5678解释为与计算机集成。
下图显示了生成的设备拓扑和关联的容器 ID 分配。
前面的示例显示了经常遇到的开发节点拓扑:设备硬连接到特定总线位置的便携式计算机,这些位置错误地将自己报告为可移动。 与计算机物理集成的设备(如网络摄像头或生物识别 (指纹) 传感器)不应报告为可移动设备,因为用户无法将它们与计算机物理分离。 可移动替代允许独立硬件供应商 (IHV) 或原始设备制造商 (OEM) 更改 PnP 管理器解释可移动设备功能的方式,从而影响设备的容器 ID 分配。
示例 2
下面显示了与特定 硬件 ID 值匹配的所有开发节点的可移动设备功能替代。
在此示例中,替代将启用可移动设备功能,并将替代应用于硬件 ID 值为 USB\VID_062A& PID_0000的开发节点。
下面是此替代的注册表表格式的高级说明。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceOverrides
USB#VID_062A&PID_00001
LocationPaths
*
Removable=1
1 HardwareID 注册表子项的名称。
在此示例中,具有 USB\VID_1234&硬件 ID 的开发节点PID_5678正确报告设备可移动功能。 PnP 管理器为其及其所有子开发节点生成容器 ID (ContainerID {B}) 。
但是,具有 USB\VID_062A&硬件 ID 的子开发节点PID_0000与替代匹配。 因此,PnP 管理器为此开发节点及其所有子开发节点生成另一个包含 ID (ContainerID {C}) 。
与以前一样,此替代会更改 PnP 管理器对设备拓扑的解释。 物理设备分配了两个容器 ID,Windows被视为两个设备。 请注意,使用 USB\VID_062A&的硬件 ID 的开发节点PID_0000在将开发节点分组到设备中可移动。 这不会更改设备可移动功能开发节点报告的值。
此外,指定了 * 注册表子项以指示此替代应应用于具有 USB\VID_062A&硬件 ID 的计算机上的所有开发节点PID_0000。
下图显示了生成的设备拓扑和关联的容器 ID 分配。