1

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

  1. 呼吁。SetupDiGetClassDevs_GUID_DEVCLASS_DISPLAY
  2. 调用SetupDiBuildDriverInfoList结果集。
  3. 调用SetupDiEnumDriverInfo带有 的设备集SPDIT_COMPATDRIVER,它为我提供了与 GPU 兼容的所有已知驱动程序。

结果包括来自 Microsoft 的后备驱动程序,我可以轻松地排除它,但它还包括已安装在系统上的所有驱动程序版本(来自 NVIDIA)。

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

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

4

2 回答 2

1

仅供参考,您还可以查询SPDRP_DRIVERvia SetupDiGetDeviceRegistryProperty,然后在Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\. 该密钥包含所有驱动程序信息。是来自 WebKit 的一些示例代码,它们实际上以这种方式检索 GPU 信息。

于 2018-04-12T16:03:29.280 回答
0

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

于 2018-04-12T15:28:30.787 回答