我试图使用C++和SetupAPI在Windows上找到当前活动的图形驱动程序的版本。解决方案大致看上去像
SetupDiGetClassDevs GUID_DEVCLASS_DISPLAY。SetupDiBuildDriverInfoList。SetupDiEnumDriverInfo调用SPDIT_COMPATDRIVER设置的设备,这给我提供了与GPU兼容的所有已知驱动程序。结果包括微软的后备驱动程序,我可以很容易地排除它,但它也包括所有已经安装在系统上的驱动程序版本(来自NVIDIA)。
问题是:我如何找出哪些驱动程序实际运行?
我从步骤1返回的SP_DEVINFO_DATA中知道如何调用驱动程序服务,我也得到了某种注册表项,但我不知道如何将它与SP_DRVINFO_DATA联系起来。我也知道NVAPI提供驱动程序管理功能,但我更喜欢与各种供应商的GPU一起工作的解决方案。
发布于 2018-04-12 15:28:30
同时,我在为什么SetupDiEnumDriverInfo会为我的驱动程序提供两个版本号找到了解决方案:在步骤3之前,您需要用DI_FLAGSEX_INSTALLEDDRIVER标志更新设备信息的安装参数。
发布于 2018-04-12 16:03:29
只有FYI,还可以通过SPDRP_DRIVER查询SetupDiGetDeviceRegistryProperty,然后在Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\下查找该注册表值。那个键包含了所有的驱动程序信息。这里是来自WebKit的一些示例代码,它实际上以这种方式检索GPU信息。
https://stackoverflow.com/questions/49796791
复制相似问题