Узнайте активный графический драйвер с помощью SetupAPI
Я пытаюсь выяснить версию активного на данный момент графического драйвера для Windows, используя C++ и SetupAPI. Решение примерно выглядит
- Вызов
SetupDiGetClassDevs
заGUID_DEVCLASS_DISPLAY
, - Вызов
SetupDiBuildDriverInfoList
для набора результатов. - Вызов
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 таким способом.