枚举已安装的设备
不应直接使用注册表项枚举设备。 注册表项不包含枚举系统上已安装设备所需的信息。 此信息(例如设备是实际存在的还是虚拟设备 (未插入) 的设备)由即插即用 (PnP) 管理器保留。 PnP 管理器还会对注册表信息执行其他筛选。
若要安全地枚举已安装的设备,请执行以下步骤。
使用 配置管理器 函数:
使用 CM_Get_Device_ID_List 检索唯一 设备实例标识符的列表 (ID) 字符串。 若要仅检索系统中存在的设备的信息,请在 ulFlags 参数中设置CM_GETIDLIST_FILTER_PRESENT。
可以将唯一设备实例 ID 与 CM_Locate_DevNode 一起使用,以检索表示要与其他配置管理器 API 一起使用的设备 的 DEVINST 。
使用 SetupAPI 函数:
使用 SetupDiGetClassDevs 检索一组设备的信息。 若要仅检索系统中存在的设备的信息,请在 Flags 参数中设置DIGCF_PRESENT。
使用 SetupDiEnumDeviceInfo 枚举集中的设备。
可以将 SetupDiEnumDeviceInfo 返回的SP_DEVINFO_DATA与其他 SetupApi API 一起使用,也可以使用 SetupDiGetDeviceInstanceId 检索设备的唯一设备实例标识符 (ID) 。