Узнайте активный графический драйвер с помощью 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 предоставляет возможности управления драйверами, но я бы предпочел решение, которое работает с графическими процессорами всех типов поставщиков.

2 ответа

Решение

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

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

Другие вопросы по тегам