2009-03-31 6 views
2

Le code C++ suivant pour récupérer les informations carte mère via WMI fonctionne sur la plupart des machines, sauf un:requête WMI pour Win32_BaseBoard Aucun résultat

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 
} 

Plus précisément, pEnumerator->Next() renvoie 0, et donc pclsObj est à gauche NULL .

Avez-vous déjà rencontré une situation où une requête WMI sur Win32_BaseBoard ne renvoie aucune entrée?

+0

Salut pouvez-vous interroger d'autres classes et obtenir des résultats? Par exemple, que retourne Win32_BIOS? La pensée étant que cela pourrait être un problème avec WMI. – Fraser

+0

Bonne réflexion. Je vais vérifier avec le client sur la machine à laquelle ce code est en cours d'exécution. –

+0

Il existe un bug ouvert pour cela https://www.virtualbox.org/ticket/6361 – shoren

Répondre

1

Mon propre Windows XP SP3/w Machine .NET Framework 2.0 dans une machine virtuelle VirtualBox ne renvoie aucun enregistrement, comme indiqué par l'outil "wmic":

wmic:root\cli>BASEBOARD 
No Instance(s) Available 

Donc, cela semble être une normale circonstance et pas seulement une incidence isolée. Je prévois sur la possibilité qu'aucun enregistrement ne peut apparaître.