кто может помочь, проблема асинхронных вызовов в WMI?
От: Аноним  
Дата: 08.07.04 11:19
Оценка:
день добрый.
есть код(приведе ниже)
нормально работает на Win XP и выдает ошибку WBEM_E_UNPARSABLE_QUERY на Win 2000 SP4.
причем написаное на VBS отрабатыват без всяких проблем.
может кто сталкивался и знает чем помочь?
буду благодарен за любые идеи

HRESULT hRes, hRes1;
IWbemLocatorPtr spLocator;
TCHAR szServer[256];
IWbemServicesPtr spServices;
IEnumWbemClassObjectPtr spEnum;
IWbemClassObjectPtr spObject;

hRes = CoInitializeEx(0, COINIT_MULTITHREADED);

CoInitializeSecurity(
NULL,
-1,
NULL,
NULL,
RPC_C_AUTHN_LEVEL_NONE,
RPC_C_IMP_LEVEL_IMPERSONATE,
NULL,
EOAC_NONE,
0);

hRes = CoCreateInstance(__uuidof(WbemLocator), NULL,
CLSCTX_INPROC_SERVER, __uuidof(IWbemLocator),
(PVOID *)&spLocator);

if (FAILED(hRes)) _com_issue_error(hRes);

lstrcpy(szServer, _T("\\\\.\\root\\cimv2"));

hRes = spLocator->ConnectServer(_bstr_t(L"root\\cimv2"),
NULL,NULL, NULL, 0, NULL, NULL, &spServices);

if (FAILED(hRes)) _com_issue_error(hRes);

pSynk = new QuerySink;

pSynk->hwnd = this->m_hWnd;

//любой из запросов срабатывает в ХР и выдает ошибку WBEM_E_UNPARSABLE_QUERY в 2000

hRes = spServices->ExecNotificationQueryAsync(_bstr_t(L"WQL"),
//L"SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Name='notepad.exe'",
//L"select * from __instancemodificationevent within 1 where TargetInstance isa 'Win32_Printer' and TargetInstance.PrinterStatus='4'",
//L"SELECT * FROM RegistryValueChangeEvent WHERE Hive='HKEY_LOCAL_MACHINE' AND KeyPath='SOFTWARE\test' AND ValueName='str1'",
0,
NULL,
__RPC_FAR pSynk);

switch (hRes)
{
case WBEM_E_ACCESS_DENIED: MessageBox("WBEM_E_ACCESS_DENIED"); break;
case WBEM_E_FAILED: MessageBox("WBEM_E_FAILED"); break;
case WBEM_E_INVALID_CLASS: MessageBox("WBEM_E_INVALID_CLASS"); break;
case WBEM_E_INVALID_PARAMETER: MessageBox("WBEM_E_INVALID_PARAMETER"); break;
case WBEM_E_INVALID_QUERY: MessageBox("WBEM_E_INVALID_QUERY"); break;
case WBEM_E_INVALID_QUERY_TYPE: MessageBox("WBEM_E_INVALID_QUERY_TYPE"); break;
case WBEM_E_OUT_OF_MEMORY: MessageBox("WBEM_E_OUT_OF_MEMORY"); break;
case WBEM_E_TRANSPORT_FAILURE: MessageBox("WBEM_E_TRANSPORT_FAILURE"); break;
case WBEM_E_SHUTTING_DOWN: MessageBox("WBEM_E_SHUTTING_DOWN"); break;
case WBEM_E_UNPARSABLE_QUERY: MessageBox("WBEM_E_UNPARSABLE_QUERY"); break;
case WBEM_S_NO_ERROR: MessageBox("WBEM_S_NO_ERROR"); break;
}

if (hRes!= S_OK) MessageBox("ERROR!!!");
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.