Ich versuche, die WMI-Klasse Win32_Process zu verwenden, um eine Liste der laufenden Prozesse und die Benutzer, die die Besitzer jedes Prozesses sind, zu erhalten. Die Enumeration von Prozessen, die Win32_Process in C++ verwenden, war mit dem Enumerationsbeispiel von MSDN (MSDN) und dem einfachen Ändern von Win32_OperatingSystem in Win32_Process nicht so schwierig. Ich habe herausgefunden, dass ich mit der Methode GetOwner von Win32_Process den Benutzer und die Domäne des Eigentümers eines Prozesses ermitteln kann. Es gibt ein großartiges Beispiel dafür in VB (MSDN), das zeigt, dass ich das Enumerator-Objekt verwenden kann, um die spezifische Instanz von GetOwner für die Prozessinformation an einem beliebigen Punkt in der Aufzählung aufzurufen.Verwenden von Win32_Process.GetOwner in C++
Ich habe versucht, das Codebeispiel (MSDN) für "Aufruf einer Provider-Methode" zu verwenden, um herauszufinden, wie der Methodenaufruf zu GetOwner zu machen, aber ich kann nicht herausfinden, wie Sie es zum Laufen bringen. Ich treffe immer wieder Straßensperren. Normalerweise erhalte ich die ungültigen Methodenparameter. Nehmen Sie den folgenden Code Chunk
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 hat keine Eingabeparameter und wenn ich GetMethod die pInParamsDefinition immer wieder rufen NULL während pOutParams eine ptr zurückgibt. Da kein Zeiger auf pInParamsDefinition zurückgegeben wird, kann ich keine Eingaben liefern und weiß daher nicht, wie ich das Problem mit ungültigen Methodenparametern umgehen kann. Klar WMI-Programmierung ist nicht meine stärkste Fähigkeit :)
Was fehlt mir hier?