枚举已安装的设备

不应该通过直接使用注册表项来枚举设备。 注册表项不包含列举系统上已安装设备所需的信息。 此信息(例如设备是实际存在的还是虚拟设备(未插入的设备)由 即插即用(PnP)管理器持有。 PnP 管理器还会对注册表信息执行其他筛选。

若要安全地枚举已安装的设备,请执行以下步骤。

  • 使用 配置管理器 函数:

    1. 使用 CM_Get_Device_ID_List 检索唯一 设备实例标识符(ID) 字符串的列表。 若要仅检索系统中存在的设备的信息,请设置 ulFlags 参数中的CM_GETIDLIST_FILTER_PRESENT。

    2. 可以使用唯一的设备实例 ID 和 CM_Locate_DevNode 来检索到表示要与其他配置管理器 API 一起使用的设备的 DEVINST

  • 使用 SetupAPI 函数:

    1. 使用 SetupDiGetClassDevs 检索一组设备的信息。 若要仅检索系统中存在的设备的信息,请设置 Flags 参数中的DIGCF_PRESENT。

    2. 使用 SetupDiEnumDeviceInfo 枚举设备集合中的设备。

    3. 可以将 SetupDiEnumDeviceInfo 返回的 SP_DEVINFO_DATA 与其他 SetupApi API 配合使用,或使用 SetupDiGetDeviceInstanceId 来检索设备的唯一设备实例标识符 (ID)。