Перечисление установленных устройств
Не следует перечислять устройства с помощью разделов реестра напрямую. Разделы реестра не содержат необходимых сведений для перечисления устройств, установленных в системе. Эта информация, например о том, существует ли устройство на самом деле или является фантомным устройством (которое не подключено), хранится диспетчером Plug and Play (PnP). Диспетчер PnP также выполняет дополнительную фильтрацию сведений о реестре.
Чтобы безопасно перечислить установленные устройства, выполните следующие действия.
Использование функций configuration manager :
Используйте CM_Get_Device_ID_List для получения списка строк уникального идентификатора экземпляра устройства . Чтобы получить сведения только для устройств, присутствующих в системе, задайте CM_GETIDLIST_FILTER_PRESENT в параметре ulFlags .
Вы можете использовать уникальный идентификатор экземпляра устройства с CM_Locate_DevNode , чтобы получить DEVINST , представляющий устройство для использования с другими API configuration manager.
Использование функций SetupAPI :
Используйте SetupDiGetClassDevs для получения сведений о наборе устройств. Чтобы получить сведения только для устройств, присутствующих в системе, задайте DIGCF_PRESENT в параметре Flags .
Используйте SetupDiEnumDeviceInfo для перечисления устройств в наборе.
Вы можете использовать SP_DEVINFO_DATA , возвращенные SetupDiEnumDeviceInfo с другими API SetupApi, или SetupDiGetDeviceInstanceId для получения уникального идентификатора экземпляра устройства .