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

Find out the active graphics driver using SetupAPI

本文关键字:图形 驱动程序 活动 SetupAPI 使用      更新时间:2023-10-16

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

  1. 致电SetupDiGetClassDevs GUID_DEVCLASS_DISPLAY
  2. 调用结果集的SetupDiBuildDriverInfoList
  3. 调用 SetupDiEnumDriverInfo 以设置带有 SPDIT_COMPATDRIVER 的设备,这为我提供了与 GPU 兼容的所有已知驱动程序。

结果包括来自Microsoft的回退驱动程序,我可以轻松删除,但它还包括系统上已安装的所有驱动程序版本(来自 NVIDIA(。

问题是:如何找出哪些驱动程序实际正在运行?

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

供参考,您还可以通过SetupDiGetDeviceRegistryProperty查询SPDRP_DRIVER,然后在ComputerHKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlClass下查找该注册表值。该密钥包含所有驱动程序信息。下面是来自 WebKit 的一些示例代码,它实际上以这种方式检索 GPU 信息。

我同时在为什么SetupDiEnumDriverInfo为我的驱动程序提供两个版本号中找到了解决方案: 您需要在步骤 3 之前更新使用 DI_FLAGSEX_INSTALLEDDRIVER 标志设置的设备信息的安装参数。