WMI-запрос не возвращает результата C++

Я подключаюсь к Windows Server 2012 и 2008 R2 с компьютеров под управлением Windows 7.

Мой код работает на некоторых компьютерах, но на некоторых компьютерах при запуске запроса моего приложения всегда возвращается NULL.

Когда я выполняю метод Next для объекта IEnumWbemClassObject, он возвращает код ошибки x80041003.

Я пытаюсь запросить класс Win32_Process

Мой код:

 hres =  CoInitializeEx( 0, COINIT_MULTITHREADED  ); 
hres =  CoInitializeSecurity(
        NULL, 
        -1,                          // COM authentication
        NULL,                        // Authentication services
        NULL,                        // Reserved
        RPC_C_AUTHN_LEVEL_CONNECT,       // Default authentication 
        RPC_C_IMP_LEVEL_IMPERSONATE,     // Default Impersonation  
        NULL,                        // Authentication info
        EOAC_NONE,                   // Additional capabilities 
        0                            // Reserved
        );

hres = CoCreateInstance(
        CLSID_WbemLocator,             
        0, 
        CLSCTX_INPROC_SERVER, 
        IID_IWbemLocator, (LPVOID *) &pLoc);

hres = pLoc->ConnectServer( ServerName,Username, Password, NULL, WBEM_FLAG_CONNECT_USE_MAX_WAIT, NULL, NULL,    &pSvc);


COAUTHIDENTITY AuthId;
memset(&AuthId, 0, sizeof(COAUTHIDENTITY));
//Initialized AuthId


hres = CoSetProxyBlanket(
                                    pSvc,                           // Indicates the proxy to set
                                    RPC_C_AUTHN_WINNT,          // RPC_C_AUTHN_xxx
                                    RPC_C_AUTHZ_DEFAULT,            // RPC_C_AUTHZ_xxx
                                    NULL,                       // Server principal name 
                                    RPC_C_AUTHN_LEVEL_CALL,         // RPC_C_AUTHN_LEVEL_xxx 
                                    RPC_C_IMP_LEVEL_IMPERSONATE,    // RPC_C_IMP_LEVEL_xxx
                                    &AuthId,                            // client identity
                                    EOAC_NONE     
                                );

Query.Format( _T( "SELECT * FROM Win32_Process WHERE Name like '%s.exe'" ), App.Name );

    IEnumWbemClassObject* pEnumerator = NULL;

    hr = App.Server.pSvc->ExecQuery(
                            L"WQL", 
                            Query.AllocSysString(),
                            WBEM_FLAG_RETURN_IMMEDIATELY, 
                            NULL,
                            &pEnumerator
                        );

hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);

0 ответов

Другие вопросы по тегам