如何在安装驱动程序之前在 C++ 中获取 GPU 信息

     2023-02-21     245

关键词:

【中文标题】如何在安装驱动程序之前在 C++ 中获取 GPU 信息【英文标题】:How to get GPU information in C++ before the drivers are installed 【发布时间】:2012-05-09 12:48:42 【问题描述】:

我们有一款软件可以在多种不同的显卡上运行,包括 ATI 和 NVIDIA。在安装驱动程序之前,我需要能够确定显卡的设备 ID 或型号名称,以便我可以创建一个可以使用我们支持的任何显卡启动的硬盘驱动器映像,拥有它首次启动时检测显卡,安装驱动程序然后重新启动。目标平台是 WinXP。

我尝试使用 WMI,但它只能检索有关显示适配器的信息,其中不包括设备 ID,并且在安装驱动程序之前,显示适配器将只有通用数据,如“视频控制器 (VGA)”名字等等。

在安装驱动程序之前,EnumDisplayDevices 无法检测到该设备。

这一定是可能的,因为当新硬件向导打开时它知道显卡的名称,但我就是找不到方法。

有什么想法吗?

编辑 - 这是查询

ExecQuery(bstr_t("WQL"),bstr_t("SELECT * FROM Win32_PnPEntity WHERE DeviceID LIKE 'PCI\\VEN'"), WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator);

【问题讨论】:

您在 WMI 中查询什么 - 您是否从通用 PNP 设备列表中获得更多信息?例如在 PowerShell 中Get-WmiObject Win32_PNPEntity |Where$_.DeviceID.StartsWith("PCI\VEN_10DE") -or $_.DeviceID.StartsWith("PCI\VEN_1002") 我试过:ExecQuery(bstr_t("WQL"),bstr_t("SELECT * FROM Win32_PnPEntity WHERE DeviceID LIKE 'PCI\\VEN'"), WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator);但这没有返回任何结果(即查询返回 0 后对 Next() 的调用)所以我认为这仅在安装驱动程序后才有效。 但这应该会为其他 PCI 设备返回大量结果。有一些注释on this list of WMI examples on MSDN 说您应该能够检测到缺少驱动程序的 PCI 设备(如果不是 USB 设备) 好的,但我的意思是,如果您在干净的 XP 安装中进入设备管理器,您将已经设置了许多 PCI 设备,例如所有从 CD 上的捆绑包中安装了驱动程序的 USB 主机。因此,如果您的查询没有返回任何内容,我猜这是错误的。抱歉,我已经很多年没有做过 WQL,所以我不能告诉你是什么。 既然你已经解决了这个问题,我就不麻烦发布解决方案了;然而这只是一个仅供参考,这可以通过 EnumDeviceDrivers 和 SetupAPI 在没有 WMI 的情况下完成。 【参考方案1】:

为了其他用户的未来参考,我将添加我自己的答案。

与我在帖子中所说的相反,WMI 实际上可以检测到已卸载的设备,通过查询 Win32_PNPEntity 您可以获得他们的设备 ID。

【讨论】:

如何使用 C++ 从 macOS 的 Activity Monitor 应用程序获取 CPU、GPU 和 RAM 使用情况?

】如何使用C++从macOS的ActivityMonitor应用程序获取CPU、GPU和RAM使用情况?【英文标题】:HowtogetCPU,GPUandRAMusagefrommacOS\'sActivityMonitorappusingC++?【发布时间】:2021-08-2923:05:34【问题描述】:我有一个C++应用程序,我想分析CPU、GPU和RAM的... 查看详情

如何确保 DirectX 11 应用程序在带有 C++ 的双 GPU 笔记本电脑上使用独立 GPU?

】如何确保DirectX11应用程序在带有C++的双GPU笔记本电脑上使用独立GPU?【英文标题】:HowtoensureDirectX11appusethediscreteGPUonadual-gpulaptopwithC++?【发布时间】:2019-08-2110:41:21【问题描述】:我目前正在使用DirectX11开发游戏引擎项目,该... 查看详情

C++ AMP 如何在 GPU 内存中返回值?

】C++AMP如何在GPU内存中返回值?【英文标题】:C++AMPHowtoreturnvaluesinGPUmemory?【发布时间】:2013-02-2818:59:43【问题描述】:假设我有一个这样的算法:arraya=foo();arrayb=bar(a);arrayc=foobar(a,b);arrayd=fbar(a,c);现在这在CPU和CUDA上都很好,我可... 查看详情

如何使用 C++ 在 Windows 中获取应用程序数据路径?

】如何使用C++在Windows中获取应用程序数据路径?【英文标题】:HowdoIgettheapplicationdatapathinWindowsusingC++?【发布时间】:2010-05-2417:46:04【问题描述】:我浏览了整个互联网,但似乎找不到合适的解决方案。我希望能够在C++中以编程... 查看详情

在 C++ 中从 MIDI 设备获取 ID

...将从C++中的控制台应用程序开始。我是C/C++的新手,知道如何制作基本的控制台应用程序,并且阅读过Win32API。我在MSDN中寻找Win32应用程序中的多媒体,我发现了很多MIDI功能:http:/ 查看详情

在 C++ 中使用 Mono 获取程序集类

...并正在使用Mono实现一个c#脚本系统。在我需要创建MonoClass之前,我正在毫无问题地加载程序集信息。要创建MonoClass,我需要MonoImage、命名空间和类名:MonoClass*mono_class_fro 查看详情

如何在 Visual Studio Express 2013(C++) 中获取特定驱动器的当前目录?

】如何在VisualStudioExpress2013(C++)中获取特定驱动器的当前目录?【英文标题】:HowtogetcurrentdirectoryofaspecificdriveinVisualStudioExpress2013(C++)?【发布时间】:2013-12-0404:42:45【问题描述】:我正在将程序从BorlandC++Builder移植到VisualStudio2013(C+... 查看详情

如何在 C++ 中获取像素着色器版本和顶点着色器版本

...glGetString,但没有得到正确的结果。从什么获取版本?从驱动程序 查看详情

如何让我用 C++ 编写的图形程序使用 GPU 而不是 CPU 进行渲染?

】如何让我用C++编写的图形程序使用GPU而不是CPU进行渲染?【英文标题】:HowdoIgetagraphicsprogramIhavewritteninC++torenderusingtheGPUinsteadoftheCPU?【发布时间】:2015-04-2315:01:42【问题描述】:我目前正在用C++编写一个简单的图形应用程序,... 查看详情

C#在安装应用程序之前和之后获取文件类型

】C#在安装应用程序之前和之后获取文件类型【英文标题】:C#getfiletypesbeforeandafterinstallofapplication【发布时间】:2016-07-2203:22:37【问题描述】:我目前正在尝试获取ALL的文件类型关联(我知道大问题)机器上的文件类型关联,将... 查看详情

C++ Winsock API如何在接受连接之前获取连接客户端IP?

】C++WinsockAPI如何在接受连接之前获取连接客户端IP?【英文标题】:C++WinsockAPIhowtogetconnectingclientIPbeforeacceptingtheconnection?【发布时间】:2009-04-0400:54:27【问题描述】:我正在使用WinsockAPI(不是CAsyncSocket)来创建一个侦听传入连接... 查看详情

如何在 regedit 中知道有关 DirectX 的 GPU 值?

...器,我需要知道如何对这些项目进行转换并获取实际值:驱动程序版本上次看到MaxD3D11FeatureLevelMaxD3D12FeatureLev 查看详情

如何在我的 C++ 程序中获取和使用头文件 <graphics.h>?

】如何在我的C++程序中获取和使用头文件<graphics.h>?【英文标题】:HowcanIgetandusetheheaderfile<graphics.h>inmyC++program?【发布时间】:2011-10-2215:27:51【问题描述】:我一直在寻找头文件&lt;graphics.h&gt;的源代码及其相关库... 查看详情

如何在 Google 深度学习 VM 上安装 GPU 驱动程序?

】如何在Google深度学习VM上安装GPU驱动程序?【英文标题】:HowtoinstallGPUdriveronGoogleDeepLearningVM?【发布时间】:2021-09-0519:51:09【问题描述】:我刚刚用这张图片创建了一个谷歌深度学习虚拟机:c1-deeplearning-tf-1-15-cu110-v20210619-debian-... 查看详情

如何在 C++ 中获取 Windows 下的内存使用情况

】如何在C++中获取Windows下的内存使用情况【英文标题】:HowtogetmemoryusageunderWindowsinC++【发布时间】:2010-09-2121:13:17【问题描述】:我试图从程序本身中找出我的应用程序消耗了多少内存。我要查找的内存使用情况是Windows任务管... 查看详情

如何在 C++ 中获取 linux 命令输出字符串和输出状态

】如何在C++中获取linux命令输出字符串和输出状态【英文标题】:howtogetlinuxcommandoutputstringandoutputstatusinc++【发布时间】:2013-03-2318:16:38【问题描述】:我想获取Linux命令的输出字符串以及C++程序中的命令输出状态。我正在我的应... 查看详情

如何在 C++ 中打开 Nano 并从中获取字符串?

】如何在C++中打开Nano并从中获取字符串?【英文标题】:HowtoopenNanoandgetastringfromitinC++?【发布时间】:2013-01-0815:07:29【问题描述】:我正在创建一个简单的日志记录程序。当用户在控制台输入logsome_file时,程序当前只是简单地接... 查看详情

如何在 Python 中获取每秒的 GPU 使用率

】如何在Python中获取每秒的GPU使用率【英文标题】:Howtogeteverysecond\'sGPUusageinPython【发布时间】:2021-08-1420:52:11【问题描述】:我有一个由tensorflow-gpu运行的模型,我的设备是nvidia。我想列出每一秒的GPU使用率,以便我可以测量... 查看详情