设备信息集
在用户模式下,属于 设备设置类 或 设备接口类 的设备使用 设备信息元素 和设备 信息集 进行管理。设备信息集由属于某些设备设置类或设备接口类的所有设备的设备信息元素组成。
每个设备信息元素都包含设备 开发节点的句柄,以及指向与该元素描述的设备关联的所有设备接口的链接列表的指针。 如果设备信息集描述安装类的成员,则 元素可能不会指向任何设备接口,因为安装程序类成员不一定与接口相关联。
下图显示了设备信息集的内部结构。
创建设备信息集
使用 SetupDiCreateDeviceInfoList 创建设备信息集后,可以使用 SetupDiCreateDeviceInfo 创建设备信息元素并将其一次添加到列表中。 或者,可以调用 SetupDiGetClassDevs 来创建由与指定设备设置类或设备接口类关联的所有设备组成的设备信息集。
枚举设备信息
创建设备信息集后,可以枚举属于该集的设备和设备接口,但每种类型的枚举都需要不同的操作。 SetupDiEnumDeviceInfo 枚举属于满足特定条件的信息集的所有设备。 每次调用 SetupDiEnumDeviceInfo 都会提取大致对应于设备信息元素 的SP_DEVINFO_DATA 结构。 SP_DEVINFO_DATA包含设备所属类的 GUID,以及指向设备开发节点的设备 实例 句柄。 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 和有关接口的其他信息,包括具有可用于获取接口名称的编码信息的保留字段。 若要获取接口名称,还需要执行一个步骤:必须调用 SetupDiGetDeviceInterfaceDetail 。 SetupDiGetDeviceInterfaceDetail 返回 SP_DEVICE_INTERFACE_DETAIL_DATA 类型的结构,其中包含定义接口的系统对象树中的路径。