Первый раз я побежал этот пример C ++ код из MSDN для получения данных WMI с удаленного компьютера все работало нормально. Он также работал для коллег с той же конфигурацией, что и у меня: Windows Server 2008 R2 Виртуальная машина (контроллер домена) в качестве удаленной машины; Windows 7 хост-машина (в другом домене) как клиент, делающий звонки.
Однако в какой-то момент код перестал работать. Краткий обзор кода: он запрашивает учетные данные, затем подключается к удаленному серверу, а затем запрашивает информацию об ОС с помощью строки WQL Select * from win32_operatingsystem
, затем извлекает возвращенный объект ОС, затем запрашивает объект, представляющий имя ОС, и объект, представляющий свободную память на машине, выводя эту информацию на консоль. В настоящее время ошибки при первом IEnumWbemClassObject::Next
вызов, который должен получить объект ОС.
Код, с которым я сейчас работаю, является слегка адаптированной версией приведенного выше примера кода. Вот полный .cpp (с некоторыми удаленными закомментированными блоками кода):
#define _WIN32_DCOM
#define UNICODE
#include <iostream>
using namespace std;
#include <comdef.h>
#include <Wbemidl.h>
#pragma comment(lib, "wbemuuid.lib")
#pragma comment(lib, "credui.lib")
#pragma comment(lib, "comsuppw.lib")
#include <wincred.h>
#include <strsafe.h>
// Macro for cleanup (changed to exit to imitate original code more closely)
#define EXIT(x) { ret = x; goto out; }
// Entry point:
int __cdecl main(int argc, char **argv)
{
HRESULT hres;
int ret = 0;
// Initialize COM
hres = CoInitializeEx(0, COINIT_MULTITHREADED);
if (FAILED(hres))
{
cout << "Failed to initialize COM library. Error code = 0x" << hex << hres << endl;
EXIT(1);
}
// Set general COM security levels
hres = CoInitializeSecurity(
NULL,
-1, // COM authentication
NULL, // Authentication services
NULL, // Reserved
RPC_C_AUTHN_LEVEL_DEFAULT, // Default authentication
RPC_C_IMP_LEVEL_IDENTIFY, // Default Impersonation
NULL, // Authentication info
EOAC_NONE, // Additional capabilities
NULL // Reserved
);
if (FAILED(hres))
{
cout << "Failed to initialize security. Error code = 0x" << hex << hres << endl;
CoUninitialize();
EXIT(1);
}
// Obtain the initial locator to WMI
IWbemLocator* pLoc = NULL;
hres = CoCreateInstance(
CLSID_WbemLocator,
0,
CLSCTX_INPROC_SERVER,
IID_IWbemLocator,
(LPVOID*)&pLoc);
if (FAILED(hres))
{
cout << "Failed to create IWbemLocator object." << hex << hres << endl;
CoUninitialize();
EXIT(1);
}
// Connect to WMI through the IWbemLocator::ConnectServer method...
IWbemServices* pSvc = NULL;
// First, prompt for the user name and password for the remote computer
CREDUI_INFO cui;
bool useToken = false;
bool useNTLM = true;
wchar_t pszName[CREDUI_MAX_USERNAME_LENGTH+1] = {0};
wchar_t pszPwd[CREDUI_MAX_PASSWORD_LENGTH+1] = {0};
wchar_t pszDomain[CREDUI_MAX_USERNAME_LENGTH+1];
wchar_t pszUserName[CREDUI_MAX_USERNAME_LENGTH+1];
wchar_t pszAuthority[CREDUI_MAX_USERNAME_LENGTH+1];
BOOL fSave;
DWORD dwErr;
memset(&cui,0,sizeof(CREDUI_INFO));
cui.cbSize = sizeof(CREDUI_INFO);
cui.hwndParent = NULL;
cui.pszMessageText = TEXT("Press cancel to use process token");
cui.pszCaptionText = TEXT("Enter Account Information");
cui.hbmBanner = NULL;
fSave = FALSE;
dwErr = CredUIPromptForCredentials(
&cui, // CREDUI_INFO structure
TEXT(""), // Target for credentials
NULL, // Reserved
0, // Reason
pszName, // User name
CREDUI_MAX_USERNAME_LENGTH+1, // Max number for user name
pszPwd, // Password
CREDUI_MAX_PASSWORD_LENGTH+1, // Max number for password
&fSave, // State of save check box
CREDUI_FLAGS_GENERIC_CREDENTIALS |// flags
CREDUI_FLAGS_ALWAYS_SHOW_UI |
CREDUI_FLAGS_DO_NOT_PERSIST);
if (ERROR_CANCELLED == dwErr)
{
useToken = true;
}
else if (dwErr)
{
cout << "Did not get credentials: " << dwErr << endl;
pLoc->Release();
CoUninitialize();
EXIT(1);
}
if (!useNTLM)
{
cout << "not using NTLM" << endl;
StringCchPrintf(pszAuthority, CREDUI_MAX_USERNAME_LENGTH+1, L"kERBEROS: %s", L"serverdude");
}
// Connect to the remote root\cimv2 namespace and obtain pointer pSvc to make IWbemServices calls.
hres = pLoc->ConnectServer(
_bstr_t(L"\\\\serverdude\\root\\cimv2"),
_bstr_t(useToken?NULL:pszName), // User name
_bstr_t(useToken?NULL:pszPwd), // User password
NULL, // Locale
NULL, // Security flags
_bstr_t(useNTLM?NULL:pszAuthority),// Authority
NULL, // Context object
&pSvc // IWbemServices proxy
);
if (FAILED(hres))
{
cout << "Could not connect. Error code = 0x" << hex << hres << endl;
pLoc->Release();
CoUninitialize();
EXIT(1);
}
cout << "Connected to ROOT\\CIMV2 WMI namespace" << endl;
// Create COAUTHIDENTITY that can be used for setting security on proxy
COAUTHIDENTITY* userAcct = NULL;
COAUTHIDENTITY authIdent;
if (!useToken)
{
memset(&authIdent, 0, sizeof(COAUTHIDENTITY));
authIdent.PasswordLength = wcslen (pszPwd);
authIdent.Password = (USHORT*)pszPwd;
LPWSTR slash = wcschr (pszName, L'\\');
if (NULL == slash)
{
cout << "Could not create Auth identity. No domain specified.\n";
pSvc->Release();
pLoc->Release();
CoUninitialize();
EXIT(1);
}
StringCchCopy(pszUserName, CREDUI_MAX_USERNAME_LENGTH+1, slash+1);
authIdent.User = (USHORT*)pszUserName;
authIdent.UserLength = wcslen(pszUserName);
StringCchCopyN(pszDomain, CREDUI_MAX_USERNAME_LENGTH+1, pszName, slash - pszName);
authIdent.Domain = (USHORT*)pszDomain;
authIdent.DomainLength = slash - pszName;
authIdent.Flags = SEC_WINNT_AUTH_IDENTITY_UNICODE;
userAcct = &authIdent;
}
// Set security levels on a WMI connection
hres = CoSetProxyBlanket(
pSvc, // Indicates the proxy to set
RPC_C_AUTHN_DEFAULT, // RPC_C_AUTHN_xxx
RPC_C_AUTHZ_DEFAULT, // RPC_C_AUTHZ_xxx
COLE_DEFAULT_PRINCIPAL, // Server principal name
RPC_C_AUTHN_LEVEL_PKT_PRIVACY, // RPC_C_AUTHN_LEVEL_xxx
RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx
userAcct, // client identity
EOAC_NONE // proxy capabilities
);
if (FAILED(hres))
{
cout << "Could not set proxy blanket. Error code = 0x" << hex << hres << endl;
pSvc->Release();
pLoc->Release();
CoUninitialize();
EXIT(1);
}
// Use the IWbemServices pointer to make requests of WMI...
// Get the name of the operating system
IEnumWbemClassObject* pEnum = NULL;
hres = pSvc->ExecQuery(
bstr_t("WQL"),
bstr_t("Select * from Win32_OperatingSystem"),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnum);
if (FAILED(hres))
{
cout << "Query for operating system name failed." << " Error code = 0x" << hex << hres << endl;
pSvc->Release();
pLoc->Release();
CoUninitialize();
EXIT(1);
}
// Secure the enumerator proxy
hres = CoSetProxyBlanket(
pEnum, // Indicates the proxy to set
RPC_C_AUTHN_DEFAULT, // RPC_C_AUTHN_xxx
RPC_C_AUTHZ_DEFAULT, // RPC_C_AUTHZ_xxx
COLE_DEFAULT_PRINCIPAL, // Server principal name
RPC_C_AUTHN_LEVEL_PKT_PRIVACY, // RPC_C_AUTHN_LEVEL_xxx
RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx
userAcct, // client identity
EOAC_NONE // proxy capabilities
);
if (FAILED(hres))
{
cout << "Could not set proxy blanket on enumerator. Error code = 0x" << hex << hres << endl;
pEnum->Release();
pSvc->Release();
pLoc->Release();
CoUninitialize();
EXIT(1);
}
// Erase credentials from memory.
SecureZeroMemory(pszName, sizeof(pszName));
SecureZeroMemory(pszPwd, sizeof(pszPwd));
SecureZeroMemory(pszUserName, sizeof(pszUserName));
SecureZeroMemory(pszDomain, sizeof(pszDomain));
// Get the data from the OS query
IWbemClassObject* pclsObj = NULL;
ULONG uReturn = 0;
while (pEnum)
{
// DEBUG:
cout << "beginning of loop..." << endl;
// Get the result of the query
HRESULT hr = pEnum->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);
// DEBUG:
cout << "IEnumWbemClassObject::Next returned 0x" << hex << hr << endl;
// PATCH: NOT SURE WHY IT WORKS
if (0 == uReturn)
{
continue;
}
// Get the value of the Name property
VARIANT vtProp;
hr = pclsObj->Get(L"Name", 0, &vtProp, 0, 0);
if (FAILED(hr))
{
cout << "Could not get OS name. Error code = 0x" << hex << hr << endl;
EXIT(1);
}
// Display OS name info
wcout << "\tOS Name : " << vtProp.bstrVal << endl;
// Get the value of the FreePhysicalMemory property
hr = pclsObj->Get(L"FreePhysicalMemory", 0, &vtProp, 0, 0);
if (FAILED(hr))
{
cout << "Could not get free physical memory. Error code = 0x" << hex << hr << endl;
EXIT(1);
}
// Display free memory info
wcout << "\tFree physical memory (in kilobytes): " << vtProp.uintVal << endl;
VariantClear(&vtProp);
pclsObj->Release();
pclsObj = NULL;
// KEEP THIS ONLY IF USING PATCH SOLN
break;
}
// Clean up
pSvc->Release();
pLoc->Release();
pEnum->Release();
if (pclsObj)
{
pclsObj->Release();
}
CoUninitialize();
out:
system("pause");
return ret;
}
Вывод на консоль:
Подключено к пространству имен ROOT \ CIMV2 WMI начало цикла ... IEnumWbemClassObject :: Next вернул 0x800706bf начало цикла ... IEnumWbemClassObject :: Next вернул 0x0 Имя ОС: Центр обработки данных Microsoft Windows Server 2008 R2 | C: \ Windows | \ Device \ Harddisk0 \ Partition1 Свободная физическая память (в килобайтах): 8050116 Нажмите любую клавишу для продолжения . , ,
Единственное существенное изменение в коде — это цикл в конце. Пример MSDN не проверяет наличие ошибки, а вместо этого прерывает цикл, если EnumWbemClassObject::Next
устанавливает puReturned
параметр до 0 (с указанием 0 возвращенных объектов из 1 запрошенных). Вместо этого я отображаю результат, но не воздействую на него, попробуйте цикл снова, если uResult
0, и вырывается из цикла только тогда, когда это не так. Это, очевидно, хакерское решение, которое может привести к бесконечному циклу, если код работает правильно. Стоит также отметить, что в какой-то момент, когда я экспериментировал с циклом, я получил одно из этих странных нарушений доступа: программа вызвала исключение в определенной строке, но когда я изменил следующий линия проблема ушла. Это заставляет меня думать, что может быть что-то странное с повреждением памяти.
Вот странная часть: когда я бегу wbemtest.exe (предоставляемый Windows графический интерфейс для запуска команд WMI, локальных или удаленных), мой запрос также работает только со второй попытки. Как и мой код, он возвращает Error 0x800706bf: The remote procedure call failed and did not execute
с первой попытки.
Из любопытства я зарегистрировал активность WMI, используя Event Logging. Я не могу многое почерпнуть из результатов (кроме того факта, что между моим кодом и WBEMtest.exe происходит что-то другое), но вот они в любом случае:
Из прогона моего кода:
Уровень Дата и время Источник Идентификатор события Категория задачи Информация 06.12.2012 12:22:03 Microsoft-Windows-WMI-Activity 1 Нет GroupOperationId = 6350; OperationId = 6350; Operation = IWbemServices :: Connect; ClientMachine = MSJOHNSON-THINK; Пользователь = CORP \ Администратор; ClientProcessId = 26304; NamespaceName = \\ serverdude \ root \ cimv2 Информация 06.12.2012 12:22:03 Microsoft-Windows-WMI-Activity 1 Нет GroupOperationId = 6351; OperationId = 6352; Операция = Запустить IWbemServices :: ExecQuery - Выбрать * из Win32_OperatingSystem; ClientMachine = MSJOHNSON-THINK; Пользователь = CORP \ Администратор; ClientProcessId = 26304; NamespaceName = \\. \ Root \ cimv2 Информация 06.12.2012 12:22:03 Microsoft-Windows-WMI-Activity 1 Нет GroupOperationId = 6351; OperationId = 6353; Операция = Запустить IWbemServices :: ExecQuery - Выбрать * из __ClassProviderRegistration; ClientMachine = Local; Пользователь = CORP \ Администратор; ClientProcessId = 0; NamespaceName = \\. \ Root \ CIMV2 Информация 06.12.2012 12:22:03 Microsoft-Windows-WMI-Activity 1 Нет "GroupOperationId = 6351; OperationId = 6354; Operation = Start IWbemServices :: GetObject - __Win32Provider.Name =" "WmiPerfClass" "; ClientMachine = Локальный; Пользователь = CORP \ Administrator; ClientProcessId = 0; NamespaceName = \\. \ Root \ CIMV2 "Информация 06.12.2012 12:22:03 Microsoft-Windows-WMI-Activity 3 Нет Стоп OperationId = 6354 Информация 06.12.2012 12:22:03 Microsoft-Windows-WMI-Activity 1 Нет "GroupOperationId = 6351; OperationId = 6355; Operation = Start IWbemServices :: ExecQuery - ссылки на {__Win32Provider.Name =" "WmiPerfClass" " }; ClientMachine = Local; Пользователь = CORP \ Administrator; ClientProcessId = 0; NamespaceName = \\. \ Root \ CIMV2 "Information 12/6/2012 12:22:03 PM Microsoft-Windows-WMI-Activity 3 Нет Остановить OperationId = 6353 Информация 06.12.2012 12:22:03 Microsoft-Windows-WMI-Activity 1 Нет "GroupOperationId = 6351; OperationId = 6356; Operation = Start IWbemServices :: GetObject - __Win32Provider.Name =" "CIMWin32" "; ClientMachine = Локальный; Пользователь = CORP \ Administrator; ClientProcessId = 0; NamespaceName = \\. \ Root \ CIMV2 "Информация 06.12.2012 12:22:03 Microsoft-Windows-WMI-Activity 3 Нет Стоп OperationId = 6356 Информация 06.12.2012 12:22:03 Microsoft-Windows-WMI-Activity 1 Нет "GroupOperationId = 6351; OperationId = 6357; Operation = Start IWbemServices :: ExecQuery - ссылки на {__Win32Provider.Name =" "CIMWin32" " }; ClientMachine = Local; Пользователь = CORP \ Administrator; ClientProcessId = 0; NamespaceName = \\. \ Root \ CIMV2 "Information 12/6/2012 12:22:03 PM Microsoft-Windows-WMI-Activity 3 Нет Остановить OperationId = 6355 Информация 06.12.2012 12:22:03 Microsoft-Windows-WMI-Упражнение 3 Нет Стоп OperationId = 6357 Информация 06.12.2012 12:22:03 Microsoft-Windows-WMI-Activity 1 Нет GroupOperationId = 6358; OperationId = 6358; Operation = IWbemServices :: Connect; ClientMachine = WIN-T53A1FADTFB; Пользователь = NT AUTHORITY \ NETWORK SERVICE; ClientProcessId = 3000; NamespaceName = Root Информация 06.12.2012 12:22:03 Microsoft-Windows-WMI-Упражнение 3 Нет Стоп OperationId = 6358 Информация 06.12.2012 12:22:03 Microsoft-Windows-WMI-Activity 1 Нет "GroupOperationId = 6351; OperationId = 6359; Operation = Start IWbemServices :: ExecQuery - ссылки на {__Win32Provider.Name =" "CIMWin32" " }; ClientMachine = Local; Пользователь = CORP \ Administrator; ClientProcessId = 0; NamespaceName = \\. \ Root \ CIMV2 "Information 12/6/2012 12:22:03 PM Microsoft-Windows-WMI-Activity 3 Нет Остановить OperationId = 6359 Информация 06.12.2012 12:22:03 Microsoft-Windows-WMI-Activity 1 Нет GroupOperationId = 6351; OperationId = 6360; Операция = Запустить IWbemServices :: GetObject - Win32_OperatingSystem; ClientMachine = Local; Пользователь = CORP \ Администратор; ClientProcessId = 0; NamespaceName = \\. \ Root \ CIMV2 Информация 06.12.2012 12:22:03 Microsoft-Windows-WMI-Activity 3 Нет Stop OperationId = 6360 Информация 06.12.2012 12:22:03 Microsoft-Windows-WMI-Activity 1 Нет "GroupOperationId = 6351; OperationId = 6361; Operation = Start IWbemServices :: GetObject - __Win32Provider.Name =" "CIMWin32" "; ClientMachine = Локальный; Пользователь = CORP \ Administrator; ClientProcessId = 0; NamespaceName = \\. \ Root \ CIMV2 "Информация 06.12.2012 12:22:03 Microsoft-Windows-WMI-Activity 3 Нет Стоп OperationId = 6361 Информация 06.12.2012 12:22:03 Microsoft-Windows-WMI-Activity 1 Нет "GroupOperationId = 6351; OperationId = 6362; Operation = Start IWbemServices :: ExecQuery - ссылки на {__Win32Provider.Name =" "CIMWin32" " }; ClientMachine = Local; Пользователь = CORP \ Administrator; ClientProcessId = 0; NamespaceName = \\. \ Root \ CIMV2 "Information 12/6/2012 12:22:03 PM Microsoft-Windows-WMI-Activity 3 Нет Остановить OperationId = 6362 Информация 06.12.2012 12:22:03 Microsoft-Windows-WMI-Activity 2 Нет ProviderInfo для GroupOperationId = 6351; Operation = Provider :: CreateInstanceEnum - Win32_OperatingSystem; ProviderName = CIMWin32; ProviderGuid = {d63a5850-8f16-11cf-9f47-00aa00bf345c}; Путь =% systemroot% \ system32 \ wbem \ cimwin32.dll Информация 06.12.2012 12:22:03 Microsoft-Windows-WMI-Activity 1 Нет GroupOperationId = 6351; OperationId = 6363; Операция = Запустить IWbemServices :: ExecQuery - ВЫБРАТЬ __RELPATH ОТ Win32_Process; ClientMachine = Local; Пользователь = CORP \ Администратор; ClientProcessId = 0; NamespaceName = \\. \ Root \ CIMV2 Информация 06.12.2012 12:22:03 Microsoft-Windows-WMI-Activity 1 Нет "GroupOperationId = 6351; OperationId = 6364; Operation = Start IWbemServices :: GetObject - __Win32Provider.Name =" "CIMWin32" "; ClientMachine = Локальный; Пользователь = CORP \ Administrator; ClientProcessId = 0; NamespaceName = \\. \ Root \ CIMV2 "Информация 06.12.2012 12:22:03 Microsoft-Windows-WMI-Activity 3 Нет Стоп OperationId = 6364 Информация 06.12.2012 12:22:03 Microsoft-Windows-WMI-Activity 1 Нет "GroupOperationId = 6351; OperationId = 6365; Operation = Start IWbemServices :: ExecQuery - ссылки на {__Win32Provider.Name =" "CIMWin32" " }; ClientMachine = Local; Пользователь = CORP \ Administrator; ClientProcessId = 0; NamespaceName = \\. \ Root \ CIMV2 "Information 12/6/2012 12:22:03 PM Microsoft-Windows-WMI-Activity 3 Нет Остановить OperationId = 6365 Информация 06.12.2012 12:22:03 Microsoft-Windows-WMI-Activity 1 Нет GroupOperationId = 6351; OperationId = 6366; Операция = Запустить IWbemServices :: GetObject - Win32_Process; ClientMachine = Local; Пользователь = CORP \ Администратор; ClientProcessId = 0; NamespaceName = \\. \ Root \ CIMV2 Информация 06.12.2012 12:22:03 Microsoft-Windows-WMI-Упражнение 3 Нет Стоп OperationId = 6366 Информация 06.12.2012 12:22:03 Microsoft-Windows-WMI-Activity 1 Нет "GroupOperationId = 6351; OperationId = 6367; Operation = Start IWbemServices :: GetObject - __Win32Provider.Name =" "CIMWin32" "; ClientMachine = Локальный; Пользователь = CORP \ Administrator; ClientProcessId = 0; NamespaceName = \\. \ Root \ CIMV2 "Информация 06.12.2012 12:22:03 Microsoft-Windows-WMI-Activity 3 Нет Стоп OperationId = 6367 Информация 06.12.2012 12:22:03 Microsoft-Windows-WMI-Activity 1 Нет "GroupOperationId = 6351; OperationId = 6368; Operation = Start IWbemServices :: ExecQuery - ссылки на {__Win32Provider.Name =" "CIMWin32" " }; ClientMachine = Local; Пользователь = CORP \ Administrator; ClientProcessId = 0; NamespaceName =
Из прогона WBEMtest.exe:
Уровень Дата и время Источник Идентификатор события Категория задачи Информация 06.12.2012 12:29:41 Microsoft-Windows-WMI-Activity 1 Нет GroupOperationId = 6373; OperationId = 6373; Operation = IWbemServices :: Connect; ClientMachine = MSJOHNSON-THINK; Пользователь = CORP \ Администратор; ClientProcessId = 26004; NamespaceName = \\ serverdude \ root \ cimv2 Информация 06.12.2012 12:29:52 Microsoft-Windows-WMI-Activity 1 Нет GroupOperationId = 6374; OperationId = 6375; Операция = Запустить IWbemServices :: ExecQuery - выбрать * из win32_operatingsystem; ClientMachine = MSJOHNSON-THINK; Пользователь = CORP \ Администратор; ClientProcessId = 26004; NamespaceName = \\. \ Root \ cimv2 Информация 06.12.2012 12:29:52 Microsoft-Windows-WMI-Activity 1 Нет GroupOperationId = 6374; OperationId = 6376; Операция = Запустить IWbemServices :: ExecQuery - Выбрать * из __ClassProviderRegistration; ClientMachine = Local; Пользователь = CORP \ Администратор; ClientProcessId = 0; NamespaceName = \\. \ Root \ CIMV2 Информация 06.12.2012 12:29:52 Microsoft-Windows-WMI-Activity 1 Нет "GroupOperationId = 6374; OperationId = 6377; Operation = Start IWbemServices :: GetObject - __Win32Provider.Name =" "WmiPerfClass" "; ClientMachine = Локальный; Пользователь = CORP \ Administrator; ClientProcessId = 0; NamespaceName = \\. \ Root \ CIMV2 "Информация 06.12.2012 12:29:52 Microsoft-Windows-WMI-Activity 3 Нет Стоп OperationId = 6377 Информация 06.12.2012 12:29:52 Microsoft-Windows-WMI-Activity 1 Нет "GroupOperationId = 6374; OperationId = 6378; Operation = Start IWbemServices :: ExecQuery - ссылки на {__Win32Provider.Name =" "WmiPerfClass" " }; ClientMachine = Local; Пользователь = CORP \ Administrator; ClientProcessId = 0; NamespaceName = \\. \ Root \ CIMV2 "Информация 06.12.2012 12:29:52 Microsoft-Windows-WMI-Activity 3 Нет Остановить OperationId = 6376 Информация 06.12.2012 12:29:52 Microsoft-Windows-WMI-Activity 3 Нет Стоп OperationId = 6378 Информация 06.12.2012 12:29:52 Microsoft-Windows-WMI-Activity 1 Нет GroupOperationId = 6374; OperationId = 6379; Операция = Запустить IWbemServices :: GetObject - win32_operatingsystem; ClientMachine = Local; Пользователь = CORP \ Администратор; ClientProcessId = 0; NamespaceName = \\. \ Root \ CIMV2 Информация 06.12.2012 12:29:52 Microsoft-Windows-WMI-Activity 3 Нет Стоп OperationId = 6379 Информация 06.12.2012 12:29:52 Microsoft-Windows-WMI-Activity 2 Нет ProviderInfo для GroupOperationId = 6374; Operation = Provider :: CreateInstanceEnum - Win32_OperatingSystem; ProviderName = CIMWin32; ProviderGuid = {d63a5850-8f16-11cf-9f47-00aa00bf345c}; Путь =% systemroot% \ system32 \ wbem \ cimwin32.dll Информация 06.12.2012 12:29:52 Microsoft-Windows-WMI-Activity 1 Нет GroupOperationId = 6374; OperationId = 6380; Операция = Запустить IWbemServices :: ExecQuery - ВЫБРАТЬ __RELPATH ОТ Win32_Process; ClientMachine = Local; Пользователь = CORP \ Администратор; ClientProcessId = 0; NamespaceName = \\. \ Root \ CIMV2 Информация 06.12.2012 12:29:52 Microsoft-Windows-WMI-Activity 1 Нет GroupOperationId = 6374; OperationId = 6381; Операция = Запустить IWbemServices :: GetObject - Win32_Process; ClientMachine = Local; пользователь
Так что, да, я в полной растерянности. Кто-нибудь может понять, что происходит? Я видел сообщения о том, что другие люди наблюдали несовместимое поведение WMI между машинами в похожих ситуациях (например, здесь был задан вопрос WMI-запрос для Win32_BaseBoard не возвращает результатов—не могу связать из-за максимума с двумя гиперссылками для новых пользователей), но я никогда не видел удовлетворительного объяснения. Кстати, я начал с новой виртуальной машины и все еще имел эту проблему (хотя время от времени WBEMtest.exe не выдает ошибку с первой попытки).
Задача ещё не решена.
Других решений пока нет …