WMI: ошибка при получении свойств перечисления из Win32_OperatingSystem
Я столкнулся с проблемой при использовании WMI с C++, Visual 6.0, Windows XP.
Я попытался получить список свойств из Win32_OperatingSystem
Однако при вызове функции Next я получаю код ошибки 0x80041018
int CSystemInfo::Init()
{
HRESULT hRes = CoInitializeEx(0, COINIT_APARTMENTTHREADED);
if(FAILED(hRes))
return 1;
hRes = CoInitializeSecurity(NULL,
-1,
NULL,
NULL,
RPC_C_AUTHN_LEVEL_DEFAULT,
RPC_C_IMP_LEVEL_DELEGATE,
NULL,
EOAC_NONE,
NULL
);
if(FAILED(hRes))
{
CoUninitialize();
return 2;
}
IWbemLocator *locator = NULL;
hRes = CoCreateInstance(
CLSID_WbemLocator,
0,
CLSCTX_INPROC_SERVER,
IID_IWbemLocator,
(LPVOID*)&locator
);
if(FAILED(hRes))
{
CoUninitialize();
return 3;
}
IWbemServices *services = NULL;
hRes = locator->ConnectServer(
BSTR(L"ROOT\\CIMV2"),
NULL,
NULL,
0,
NULL,
0,
0,
&services);
if(FAILED(hRes))
{
FormatingString("locator->ConnectServer", hRes);
locator->Release();
CoUninitialize();
return 4;
}
hRes = CoSetProxyBlanket(
services,
RPC_C_AUTHN_WINNT,
RPC_C_AUTHZ_NONE,
NULL,
RPC_C_AUTHN_LEVEL_CALL,
RPC_C_IMP_LEVEL_IMPERSONATE,
0,
EOAC_NONE
);
if(FAILED(hRes))
{
FormatingString("CoSetProxyBlanket", hRes);
services->Release();
locator->Release();
CoUninitialize();
return 5;
}
//Win32_OperatingSystem
IEnumWbemClassObject * pEnumerator = NULL;
hRes = services->ExecQuery(
BSTR("WQL"),
BSTR("SELECT * FROM Win32_OperatingSystem"),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator);
if(FAILED(hRes))
{
FormatingString("services->ExecQuery", hRes);
services->Release();
locator->Release();
CoUninitialize();
return 6;
}
IWbemClassObject *obj=NULL;
ULONG ret_objs_num;
hRes = WBEM_S_NO_ERROR;
while(WBEM_S_NO_ERROR == hRes)
{
//ERROR
hRes = pEnumerator->Next(WBEM_INFINITE, 1, &obj, &ret_objs_num);
if(FAILED(hRes) || obj== NULL || ret_objs_num==0)
{
FormatingString("pEnumerator->Next", hRes);
break;
}
VARIANT vtProp;
hRes = obj->Get(L"Name", 0, &vtProp,0,0);
VariantClear(&vtProp);
obj->Release();
}
pEnumerator->Release();
services->Release();
locator->Release();
CoUninitialize();
return 0;
}
Какие есть идеи в части возникновения ошибки