来自WMI的HRESULT ExecQuery总是成功,尽管查询错误

时间:2014-09-18 16:06:51

标签: c++ wmi wmi-query wql

我尝试在程序中使用来自http://msdn.microsoft.com/en-us/library/aa392107%28v=vs.85%29.aspx的ExecQuery(),但我遇到了错误问题。具体来说,如果WQL查询是好的,那么一切正常。结果很好,我可以和他们一起工作。但是,如果查询不好像

"SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPENab8f" 

从ExecQuery返回的HRESULT仍然是成功的。但是访问枚举器会使程序崩溃。文档指出存在指示不同错误的返回值。以下内容无法理解:

IEnumWbemClassObject * wmienumerator = NULL;
//
HRESULT hres;
hres = pWMI->ExecQuery(
    bstr_t("WQL"),
    bstr_t("SELECT * FROM Win32_Networkiguration WHERE IntderfaceIndex=4"),
    WBEM_FLAG_RETURN_IMMEDIATELY | WBEM_FLAG_FORWARD_ONLY,
    NULL,
    &wmienumerator);

if(hres != WBEM_S_NO_ERROR)
{    
    cerr << "error";
    exit(1);
}
else if(hres != 0)
{
    cerr << "error";
    exit(1);
}
else if(hres == WBEM_E_FAILED)
{
    cerr << "error";
    exit(1);
}
else if(FAILED(hres))
{
    cerr << "error";
    exit(1);
}

我尝试了很多其他的If语句,检查不同的值,以及检查枚举器指针是否仍为NULL(它不是)。

此时,我想知道是否是有效查询,并且返回的结果只是空的。我不知道如何检查是否是这种情况......

我觉得我错过了一些对经验丰富的程序员来说显而易见的事情,我刚刚从我的新生C ++课程中崭露头角......

0 个答案:

没有答案