Следующий код C ++ для получения информации о материнской плате через WMI работает на большинстве машин, кроме одного :
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.
Вы когда-нибудь сталкивались с ситуацией, когда запрос WMI на Win32_BaseBoard
не возвращает записей?