设备信息集合

在用户模式下,属于 设备设置类设备接口类的设备 使用 设备信息元素 和设备 信息集 进行管理。设备信息集由属于某些设备设置类或设备接口类的所有设备的设备信息元素组成。

每个设备信息元素都包含对设备节点devnode的句柄,以及指向与该元素所描述设备相关的所有设备接口的链表的指针。 如果设备信息集描述安装类的成员,则元素可能不会指向任何设备接口,因为安装程序类成员不一定与接口关联。

下图显示了设备信息集的内部结构。

说明设备信息集的示意图。

创建设备信息集

使用 SetupDiCreateDeviceInfoList 创建设备信息集后,可以使用 SetupDiCreateDeviceInfo 一次创建设备信息元素并将其添加到列表中。 或者,可以调用 SetupDiGetClassDevs 来创建由与指定设备设置类或设备接口类关联的所有设备组成的设备信息集。

枚举设备信息

创建设备信息集后,可以枚举属于该集的设备和设备接口,但每种枚举类型都需要不同的作。 SetupDiEnumDeviceInfo 枚举属于满足特定条件的信息集的所有设备。 每次调用 SetupDiEnumDeviceInfo 都会提取与设备信息元素大致对应的 SP_DEVINFO_DATA 结构。 SP_DEVINFO_DATA 包含设备所属类的 GUID,以及一个设备实例句柄,该句柄指向设备的 devnode。 SP_DEVINFO_DATA结构和完整的设备元素之间的主要区别在于,SP_DEVINFO_DATA 不包含 与设备关联的接口的链接列表。 因此, SetupDiEnumDeviceInfo 不能用于枚举设备信息集中的接口。

若要枚举设备信息集中的设备接口,请调用 SetupDiEnumDeviceInterfaces。 此例程遍历设备信息集中的所有设备信息元素,提取每个元素的接口列表中的接口,在每次调用时返回一个接口。 如果 SetupDiEnumDeviceInterfaces 作为输入传递一个SP_DEVINFO_DATA结构给它的第二个参数,它会将枚举限制为仅与SP_DEVINFO_DATA所指示的设备相关联的接口。

SetupDiEnumDeviceInterfaces 返回 SP_DEVICE_INTERFACE_DATA 结构。 SP_DEVICE_INTERFACE_DATA包含接口类 GUID 和其他有关接口的信息,包括具有可用于获取接口名称的编码信息的保留字段。 若要获取接口名称,需要执行一个步骤:必须调用 SetupDiGetDeviceInterfaceDetailSetupDiGetDeviceInterfaceDetail 返回 SP_DEVICE_INTERFACE_DETAIL_DATA类型的结构 ,该结构包含定义接口的系统对象树中的路径。