Я пытаюсь использовать класс WMI Win32_Process, чтобы получить список запущенных процессов и пользователей, которые являются владельцами каждого процесса. Перечисление процессов с использованием Win32_Process в C ++ было несложным, используя пример перечисления из MSDN (MSDN) и просто изменив Win32_OperatingSystem на Win32_Process. Я обнаружил, что с помощью метода GetOwner Win32_Process я могу получить пользователя и домен владельца процесса. В VB есть отличный пример (MSDN), который показывает, что я могу использовать объект перечислителя для вызова конкретного экземпляра GetOwner для получения информации о процессе в любой заданной точке перечисления.
Я попытался использовать пример кода (MSDN) для «Вызов метода поставщика», чтобы выяснить, как вызвать метод GetOwner, но я не могу понять, как заставить его работать. Я постоянно натыкаюсь на преграды. обычно я получаю неверные параметры метода. Возьмите следующий фрагмент кода
BSTR MethodName = SysAllocString(L"GetOwner");
BSTR ClassName = SysAllocString(L"Win32_Process");
IWbemClassObject* pClass = NULL;
hres = pSvc->GetObject(ClassName, 0, NULL, &pClass, NULL);
printf("[1] hres = %08x\n", hres);
IWbemClassObject* pInParamsDefinition = NULL;
IWbemClassObject* pOutParams = NULL;
hres = pClass->GetMethod(MethodName, 0, &pInParamsDefinition, &pOutParams);
printf("[2] hres = %08x (%08x, %08x)\n", hres, pInParamsDefinition, pOutParams);
// Execute Method
hres = pSvc->ExecMethod(L"Win32_Process", MethodName, 0, NULL, NULL, &pOutParams, NULL);
VARIANT varReturnValue;
hres = pOutParams->Get(_bstr_t(L"ReturnValue"), 0,
&varReturnValue, NULL, 0);
wprintf(L"The command is: %s\n", V_BSTR(&varReturnValue));
GetOwner не имеет входных параметров, и когда я вызываю GetMethod, pInParamsDefinition всегда возвращает NULL, а pOutParams возвращает ptr. Поскольку в pInParamsDefinition не возвращается указатель, я не могу предоставить входные данные и поэтому не знаю, как обойти проблему с недопустимыми параметрами метода. Ясно, что программирование WMI - не самое сильное мое умение :)
Что мне здесь не хватает?