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

Posted

技术标签:

【中文标题】使用 SetupAPI 找出活动的图形驱动程序【英文标题】:Find out the active graphics driver using SetupAPI 【发布时间】:2018-04-12 12:37:48 【问题描述】:

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

    请致电SetupDiGetClassDevs 获取GUID_DEVCLASS_DISPLAY。 调用SetupDiBuildDriverInfoList获取结果集。 调用SetupDiEnumDriverInfo 获取设置为SPDIT_COMPATDRIVER 的设备,它会为我提供与GPU 兼容的所有已知驱动程序。

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

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

谢谢。我已经查看了SPDRP_DRIVER,但我无法在注册表的根路径上找到任何文档。【参考方案2】:

我同时在Why does SetupDiEnumDriverInfo give two version numbers for my driver找到了解决方案:您需要在第3步之前更新带有DI_FLAGSEX_INSTALLEDDRIVER标志的设备信息集的安装参数。

【讨论】:

以上是关于使用 SetupAPI 找出活动的图形驱动程序的主要内容,如果未能解决你的问题,请参考以下文章

Windows设备驱动判断

以编程方式检测有故障或缺失的驱动程序

有没有方法可以删除驱动程序文件并在UWP应用程序中卸载设备?

win10显示系统找不到指定文件?

R语言使用x11函数为X Window系统启动图形设备驱动程序使用x11函数启动图形设备驱动程序(在驱动程序中进行可视化)

Linux - 图形驱动程序和 Mesa 之间的关系