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