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