PnP 管理器维护一个设备树,用于跟踪系统中的设备。 下图显示了示例系统配置的设备树。
               
              
            
设备树包含有关系统上存在的设备的信息。 当计算机启动时,PnP 管理器会生成此树,使用驱动程序和其他组件的信息,并在添加或删除设备时更新树。
设备树的每个节点称为设备节点或 devnode。 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 参考页。
不能对设备树的生成顺序做出任何假设,除非在设备树的任何子设备之前配置了总线设备。 例如,不应假定总线上的一台设备会在总线上的另一台设备之前被配置。