Узнайте активный графический драйвер с помощью SetupAPI

Я пытаюсь выяснить версию активного на данный момент графического драйвера для Windows, используя C ++ и SetupAPI. Решение примерно выглядит

  1. Вызов SetupDiGetClassDevs за GUID_DEVCLASS_DISPLAY,
  2. Вызов SetupDiBuildDriverInfoList для набора результатов.
  3. Вызов SetupDiEnumDriverInfo для устройства, установленного с SPDIT_COMPATDRIVER, что дает мне все известные драйверы, совместимые с графическим процессором.

Результатом является резервный драйвер от Microsoft, который я могу легко исключить, но он также включает в себя все версии драйверов (от NVIDIA), которые были установлены в системе.

Вопрос в том, как узнать, какой из драйверов действительно запущен?

Я знаю из SP_DEVINFO_DATA На шаге 1 я вернулся к тому, как вызывается служба драйверов, и я также получил какой-то ключ реестра, но я не вижу, как я могу связать это с SP_DRVINFO_DATA, Я также знаю, что NVAPI предоставляет возможности управления драйверами, но я бы предпочел решение, которое работает с графическими процессорами всех типов поставщиков.

0

Решение

Просто к вашему сведению, вы также можете запросить SPDRP_DRIVER с помощью SetupDiGetDeviceRegistryProperty а затем искать это значение реестра под Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\, Этот ключ содержит всю информацию о драйвере. Вот это некоторый пример кода из WebKit, который фактически получает информацию о GPU таким образом.

1

Другие решения

Я нашел решение в то же время в Почему SetupDiEnumDriverInfo дает два номера версии для моего драйвера: Вам необходимо обновить параметры установки информации об устройстве, установленной с помощью DI_FLAGSEX_INSTALLEDDRIVER флаг перед шагом 3.

0

По вопросам рекламы [email protected]