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;
}

Какие есть идеи в части возникновения ошибки


Ответы (0 шт):