可移动设备功能概述

可移动设备功能有点 (可移动) ,总线驱动程序DEVICE_CAPABILITIES结构中设置,以响应指定设备节点 (devnode) 的IRP_MN_QUERY_CAPABILITIES函数代码。

当开发节点及其所有子开发节点组成设备时,总线驱动程序为 devnode 设置可移动设备功能,该设备可在计算机运行时从其父 devnode 上物理删除、断开连接或拔出。 通常,如果 devnode 是 devnode 拓扑中最顶层的 devnode,则应将其标记为可移动。

在开发节点上正确设置可移动设备功能非常重要。 如果总线驱动程序无法为其枚举的开发节点提供容器 ID,即插即用 (PnP) 管理器将使用可移动设备功能为设备枚举的所有开发节点生成容器 ID。

例如,假设单功能设备(如鼠标)通过 USB 连接到计算机。 在这种情况下,USB 总线驱动程序会检测新设备,检测它是 (HID) 的 USB 人机接口设备,并为该设备创建 USB HID 开发节点。 HID 开发节点还会检测 HID 设备是否为鼠标,并为符合 HID 的鼠标创建子开发节点。 此时,鼠标已安装,并且在计算机上正常运行。 这两个新的开发节点都使用独立的 驱动程序堆栈

一般情况下,设备的最顶层 (父) 开发节点应设置为可移动,而其每个子开发节点不应设置为可移动。 在前面的示例中,USB 总线驱动程序将 USB HID 开发节点的 可移动 位设置为 TRUE ,并将符合 HID 的子级鼠标开发节点的 可移动 位设置为 FALSE

以下设备管理器屏幕截图显示了通用 USB 鼠标的开发节点拓扑,并显示鼠标的哪些开发节点标记为可移动。

显示 usb 鼠标的 devnode 拓扑的设备管理器窗口的屏幕截图。