以下用于通过WMI 检索主板信息的C ++代码适用于大多数计算机,除了一个:
IEnumWbemClassObject* pEnumerator = NULL;
hres = pSvc->ExecQuery(
bstr_t("WQL"),
bstr_t("Select * from Win32_BaseBoard"),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator);
if (FAILED(hres))
{
// handle error, exit
}
IWbemClassObject *pclsObj = NULL;
ULONG uReturn = 0;
while (pEnumerator)
{
HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1,
&pclsObj, &uReturn);
if(0 == uReturn)
{
break;
}
VARIANT vtProp;
hr = pclsObj->Get(L"Product", 0, &vtProp, 0, 0);
std::wstring productNo = vtProp.bstrVal;
// do stuff with productNo
}
具体来说,pEnumerator->Next()
返回0,因此pclsObj
保留为NULL。
您是否曾遇到Win32_BaseBoard
上的WMI查询未返回任何条目的情况?
答案 0 :(得分:1)
VirtualBox虚拟机中我干净的Windows XP SP3 / w .NET Framework 2.0计算机不会返回任何记录,如“wmic”工具所示:
wmic:root\cli>BASEBOARD
No Instance(s) Available
所以这似乎是一种正常情况,而不仅仅是一个孤立的发病率。我会计划不会出现任何记录的可能性。