使用 SetupAPI 找出活动的图形驱动程序
Find out the active graphics driver using SetupAPI
我尝试使用 C++ 和 SetupAPI 在 Windows 上找出当前活动图形驱动程序的版本。解决方案大致看起来像
- 为
GUID_DEVCLASS_DISPLAY
呼叫 SetupDiGetClassDevs
。
- 为结果集调用
SetupDiBuildDriverInfoList
。
- 为使用
SPDIT_COMPATDRIVER
设置的设备调用 SetupDiEnumDriverInfo
,这为我提供了与 GPU 兼容的所有已知驱动程序。
结果包括来自微软的后备驱动程序,我可以很容易地排除它,但它也包括系统上已安装的所有驱动程序版本(来自 NVIDIA)。
问题是:我如何找出哪个驱动程序实际上是 运行?
我从第 1 步返回的 SP_DEVINFO_DATA
知道驱动程序服务是如何调用的,我也得到了某种注册表项,但我不知道如何将它与 SP_DRVINFO_DATA
.我也知道NVAPI提供了驱动管理功能,但我更喜欢一个能与各种供应商的GPU一起工作的解决方案。
我同时在Why does SetupDiEnumDriverInfo give two version numbers for my driver找到了解决方案:您需要在第3步之前更新带有DI_FLAGSEX_INSTALLEDDRIVER
标志的设备信息集的安装参数。
仅供参考,您还可以通过 SetupDiGetDeviceRegistryProperty
查询 SPDRP_DRIVER
,然后在 Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\
下查找该注册表值。该密钥包含所有驱动程序信息。 Here 是 WebKit 中的一些示例代码,实际上以这种方式检索 GPU 信息。
我尝试使用 C++ 和 SetupAPI 在 Windows 上找出当前活动图形驱动程序的版本。解决方案大致看起来像
- 为
GUID_DEVCLASS_DISPLAY
呼叫SetupDiGetClassDevs
。 - 为结果集调用
SetupDiBuildDriverInfoList
。 - 为使用
SPDIT_COMPATDRIVER
设置的设备调用SetupDiEnumDriverInfo
,这为我提供了与 GPU 兼容的所有已知驱动程序。
结果包括来自微软的后备驱动程序,我可以很容易地排除它,但它也包括系统上已安装的所有驱动程序版本(来自 NVIDIA)。
问题是:我如何找出哪个驱动程序实际上是 运行?
我从第 1 步返回的 SP_DEVINFO_DATA
知道驱动程序服务是如何调用的,我也得到了某种注册表项,但我不知道如何将它与 SP_DRVINFO_DATA
.我也知道NVAPI提供了驱动管理功能,但我更喜欢一个能与各种供应商的GPU一起工作的解决方案。
我同时在Why does SetupDiEnumDriverInfo give two version numbers for my driver找到了解决方案:您需要在第3步之前更新带有DI_FLAGSEX_INSTALLEDDRIVER
标志的设备信息集的安装参数。
仅供参考,您还可以通过 SetupDiGetDeviceRegistryProperty
查询 SPDRP_DRIVER
,然后在 Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\
下查找该注册表值。该密钥包含所有驱动程序信息。 Here 是 WebKit 中的一些示例代码,实际上以这种方式检索 GPU 信息。