使用SetupAPI找出活动的图形驱动程序

时间:2018-04-12 12:37:49

标签: c++ winapi setupapi

我尝试使用C ++和SetupAPI在Windows上找出当前活动图形驱动程序的版本。解决方案大致类似于

  1. 致电SetupDiGetClassDevs GUID_DEVCLASS_DISPLAY
  2. 调用SetupDiBuildDriverInfoList获取结果集。
  3. 使用SetupDiEnumDriverInfo为设备集调用SPDIT_COMPATDRIVER,这为我提供了与GPU兼容的所有已知驱动程序。
  4. 结果包括Microsoft的后备驱动程序,我可以很容易地将其删除,但它还包括已安装在系统上的所有驱动程序版本(来自NVIDIA)。

    问题是:如何找出实际运行的驱动程序?

    我从步骤1中返回的SP_DEVINFO_DATA知道如何调用驱动程序服务,并且我也获得了某种注册表项,但我看不出如何将其与SP_DRVINFO_DATA相关联。我也知道NVAPI提供了驱动程序管理功能,但我更喜欢适用于各种供应商的GPU的解决方案。

2 个答案:

答案 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标志更新设备信息集的安装参数。