Я пытаюсь выяснить версию активного на данный момент графического драйвера для Windows, используя C ++ и SetupAPI. Решение примерно выглядит
SetupDiGetClassDevs
за GUID_DEVCLASS_DISPLAY
,SetupDiBuildDriverInfoList
для набора результатов.SetupDiEnumDriverInfo
для устройства, установленного с SPDIT_COMPATDRIVER
, что дает мне все известные драйверы, совместимые с графическим процессором.Результатом является резервный драйвер от Microsoft, который я могу легко исключить, но он также включает в себя все версии драйверов (от NVIDIA), которые были установлены в системе.
Вопрос в том, как узнать, какой из драйверов действительно запущен?
Я знаю из SP_DEVINFO_DATA
На шаге 1 я вернулся к тому, как вызывается служба драйверов, и я также получил какой-то ключ реестра, но я не вижу, как я могу связать это с SP_DRVINFO_DATA
, Я также знаю, что NVAPI предоставляет возможности управления драйверами, но я бы предпочел решение, которое работает с графическими процессорами всех типов поставщиков.
Просто к вашему сведению, вы также можете запросить SPDRP_DRIVER
с помощью SetupDiGetDeviceRegistryProperty
а затем искать это значение реестра под Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\
, Этот ключ содержит всю информацию о драйвере. Вот это некоторый пример кода из WebKit, который фактически получает информацию о GPU таким образом.
Я нашел решение в то же время в Почему SetupDiEnumDriverInfo дает два номера версии для моего драйвера: Вам необходимо обновить параметры установки информации об устройстве, установленной с помощью DI_FLAGSEX_INSTALLEDDRIVER
флаг перед шагом 3.