确定设备的父设备
有时需要访问设备的父级。 例如,某些类型的硬件设备的操作取决于特定父设备与子设备集之间的固定关系。 若要卸载此类硬件设备,除所有子设备外,还必须卸载父设备。 若要卸载父级,必须获取父级的 SP_DEVINFO_DATA 结构。 通用串行总线 (USB) 复合设备(如多功能打印机)就是此类设备。 它在系统中由父复合设备和一个或多个子接口设备表示, (请参阅 USB 驱动程序堆栈体系结构) 。 若要卸载多功能打印机,除了卸载其所有子接口设备外,还必须卸载其父复合设备。
当即插即用 (PnP) 管理器在系统中配置设备时,它会将设备的设备节点 (devnode) 添加到设备树中。 当 PnP 管理器从系统中删除设备时,它会从设备树中删除该设备的开发节点,并且该设备将成为 不存在的设备。
若要确定设备父级的设备实例 ID,可以使用 SetupDiGetDeviceProperty 查询设备上的 DEVPKEY_Device_Parent 属性。 对于 现有 设备,这将提供该设备父级的设备实例 ID。 对于 非现有 设备:
- 在 Windows 8 及更高版本上:
- 如果上一次非现有设备为现有设备的父设备仍作为系统 (存在或不存在的设备) ,DEVPKEY_Device_Parent将提供该父设备的设备实例 ID。
- 如果上次非现有设备为现有设备时的非现有设备的父设备不作为系统上的设备存在,DEVPKEY_Device_Parent将返回位于设备树根处的设备的设备实例 ID。
- 在Windows 8之前:
- 检索 DEVPKEY_Device_Parent 将返回未找到属性的错误。
获得父设备的设备实例 ID 后,可以使用 SetupDiOpenDeviceInfo 获取父设备的 SP_DEVINFO_DATA 结构。