设备树
PnP 管理器维护一个设备树,用于跟踪系统中的设备。 下图显示了示例系统配置的设备树。
设备树包含有关系统上存在的设备的信息。 PnP 管理器在计算机启动时使用驱动程序和其他组件的信息生成此树,并在添加或删除设备时更新树。
设备树的每个节点称为设备节点或 devnode。 开发节点由设备驱动程序的设备 对象 以及系统维护的内部信息组成。 因此,每个 设备堆栈都有一个开发节点。
PnP 管理器使用 IRP_MN_QUERY_DEVICE_RELATIONS 请求请求总线驱动程序提供其子设备的列表。 总线驱动程序根据其总线协议确定其子级列表。 例如, Windows ACPI 驱动程序(Acpi.sys)查找 ACPI 命名空间,PCI 驱动程序查询 PCI 配置空间,USB 集线器驱动程序遵循 USB 总线协议。
设备树是分层的,总线上的设备表示为总线适配器、控制器或其他 总线设备的“子级”。 (总线设备是可将其他物理、逻辑或虚拟设备连接到的任何设备。) 可以使用设备管理器并选择允许按连接查看设备的视图选项,在设备树中查看设备的层次结构。
设备树的层次结构反映了设备在计算机中附加的结构。 PnP 管理器在管理设备时使用此层次结构。 例如,如果用户请求从上图表示的计算机中拔出 USB 控制器,则 PnP 管理器会从设备树中确定此操作将导致其他三台设备也拔出, (USB 集线器、游戏杆和相机) 。 当 PnP 管理器查询 USB 控制器的驱动程序以确定移除控制器是否安全时,它还 (集线器、游戏杆和相机) 查询控制器后代的驱动程序。
设备树是动态的。 在计算机中添加和删除设备时,PnP 管理器 (驱动程序) 维护系统上设备的当前图片。
除了设备树中表示的分层关系外,计算机上的设备之间还有其他关系。 其中包括 删除关系 和 弹出关系。 有关详细信息,请参阅 IRP_MN_QUERY_DEVICE_RELATIONS 的参考页。
不能对设备树的生成顺序做出任何假设,除非总线设备在其任何子设备之前配置。 例如,不应假定在总线上配置了一台设备之前配置了另一台设备。