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