使用 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 找出活动的图形驱动程序的主要内容,如果未能解决你的问题,请参考以下文章
有没有方法可以删除驱动程序文件并在UWP应用程序中卸载设备?
R语言使用x11函数为X Window系统启动图形设备驱动程序使用x11函数启动图形设备驱动程序(在驱动程序中进行可视化)