2012-05-09 35 views
2

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

我试过使用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); 
+2

你在WMI中查询什么?你是否从一般的PNP设备列表中获得更多信息?例如在PowerShell中'Get-WmiObject Win32_PNPEntity | Where {{_。DeviceID.StartsWith(“PCI \ VEN_10DE”) - 或$ _。DeviceID.StartsWith(“PCI \ VEN_1002”)}' – Rup

+0

我试过了: 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()),所以我认为这只在安装驱动程序后才起作用。 –

+1

但是,这应该会为其他PCI设备返回大量结果。 [有关MSDN上的WMI示例列表](http://msdn.microsoft.com/zh-cn/library/windows/desktop/aa394587.aspx)上有一些说明,指出您应该能够检测缺少驱动程序的PCI设备(如果不是USB设备) – Rup

回答

2

对于其他用户,我会加上我自己的答案将来参考。

与我在文章中所说的相反,WMI实际上可以检测卸载的设备,通过查询Win32_PNPEntity,您可以获取其设备ID。

相关问题