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

Find out the active graphics driver using SetupAPI

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

  1. GUID_DEVCLASS_DISPLAY 呼叫 SetupDiGetClassDevs
  2. 为结果集调用SetupDiBuildDriverInfoList
  3. 为使用 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 信息。