IWbemServices::ExecMethodAsync-Methode (wbemcli.h)
Die IWbemServices::ExecMethodAsync-Methode führt asynchron eine Methode aus, die von einem CIM-Objekt exportiert wird. Der Aufruf wird sofort an den Client zurückgegeben, während die eingehenden Parameter an den entsprechenden Anbieter weitergeleitet werden, wo er ausgeführt wird. Informationen und status werden über die angegebene Objektsenke an den Aufrufer zurückgegeben.
Methoden werden nicht direkt von der Windows-Verwaltung implementiert, sondern von Methodenanbietern exportiert. Für jede bestimmte CIM-Klasse sind die verfügbaren Methoden und deren Parameter Teil der Dokumentation für den betreffenden Anbieter.
Syntax
HRESULT ExecMethodAsync(
[in] const BSTR strObjectPath,
[in] const BSTR strMethodName,
[in] long lFlags,
[in] IWbemContext *pCtx,
[in] IWbemClassObject *pInParams,
[in] IWbemObjectSink *pResponseHandler
);
Parameter
[in] strObjectPath
Gültiger BSTR , der den Objektpfad des Objekts enthält, für das die -Methode ausgeführt werden soll. Sie können eine statische Methode aufrufen, indem Sie entweder einen Klassennamen oder einen Objektpfad zu einem instance verwenden. Der Methodenanbieter kann den Objektpfadparameter analysieren, um die Klasse und instance zu bestimmen, die die Methodendefinition enthalten.
[in] strMethodName
Der Name der Methode für das Objekt.
[in] lFlags
WBEM_FLAG_SEND_STATUS registriert bei der Windows-Verwaltung eine Anforderung zum Empfangen von zwischengeschalteten status Berichten über die Clientimplementierung von IWbemObjectSink::SetStatus. Die Anbieterimplementierung muss fortgeschrittene status Berichterstellung für dieses Flag unterstützen, um das Verhalten zu ändern. Beachten Sie, dass das flag WBEM_FLAG_USE_AMENDED_QUALIFIERS hier nicht verwendet werden kann.
[in] pCtx
In der Regel NULL; Andernfalls ist dies ein Zeiger auf ein IWbemContext-Objekt , das vom Anbieter verwendet werden kann, der die -Methode ausführt. Die Werte im Kontextobjekt müssen in der Dokumentation für den betreffenden Anbieter angegeben werden. Weitere Informationen zu diesem Parameter finden Sie unter Ausführen von Aufrufen an WMI.
[in] pInParams
Kann NULL sein, wenn zum Ausführen der Methode keine eingehenden Parameter erforderlich sind. Andernfalls verweist dies auf ein IWbemClassObject-Objekt , das die Eigenschaften enthält, die als eingehende Parameter für die Methodenausführung fungieren. Der Inhalt des Objekts ist methodenspezifisch und Teil der Spezifikation für den betreffenden Anbieter. Das am häufigsten verwendete Objekt ist jedoch eine instance der __Parameters Systemklasse. Für jeden Eingabeparameter für die methode, die aufgerufen werden soll, gibt es eine Nicht-Systemeigenschaft. Methodenanbieter ignorieren die ID-Qualifizierer , die an jeden Parameter in der -Methode angefügt sind, die in der Regel nur von Browsern und ähnlichen Anwendungen verwendet werden.
[in] pResponseHandler
Darf nicht NULL sein. Die Objektsenke empfängt das Ergebnis des Methodenaufrufs. Die Ausgangsparameter werden an IWbemObjectSink::Indicate gesendet. Das am häufigsten zurückgegebene Objekt ist ein instance der __Parameters-Systemklasse. Weitere Informationen zu Rückgabecodes finden Sie im Abschnitt Hinweise. Wenn Sie einen Methodenanbieter implementieren, sollten Sie Indicate aufrufen, um Ausgabeparameterinformationen zurückzugeben, bevor Sie IWbemObjectSink::SetStatus aufrufen, um die endgültige status zu melden.
Rückgabewert
Diese Methode gibt ein HRESULT zurück, das den Status des Methodenaufrufs angibt. In der folgenden Liste ist der in einem HRESULT enthaltene Wert aufgeführt.
Bei einem Fehler können Sie alle verfügbaren Informationen über die COM-Funktion GetErrorInfo abrufen.
Andere Fehler werden asynchron an die Im pReponseHandler-Parameter angegebene Objektsenke gemeldet.
COM-spezifische Fehlercodes können auch zurückgegeben werden, wenn Netzwerkprobleme dazu führen, dass die Remoteverbindung mit WMI verloren geht.
Hinweise
Ein einzelner Methodenanbieter kann Methoden für viele Klassen und Instanzen bereitstellen. Methodenanbieter müssen maximal drei Rückgabewerte verarbeiten.
Die IWbemObjectSink::SetStatus-Methode wird aufgerufen, um das Ende des Resultsets anzugeben. Er kann auch ohne dazwischen liegende Aufrufe von IWbemObjectSink::Geben Sie an , ob Fehlerbedingungen auftreten.
Da der Rückruf möglicherweise nicht auf derselben Authentifizierungsebene zurückgegeben wird, wie es für den Client erforderlich ist, empfiehlt es sich, anstelle der asynchronen Kommunikation eine semisynchrone Kommunikation zu verwenden. Wenn Sie asynchrone Kommunikation benötigen, finden Sie weitere Informationen unter Aufrufen einer Methode.
Rückgabewerte | Beschreibung |
---|---|
ExecMethodAsync (erforderlich) | Gibt an, ob die Eingabeparameter für die Methode, auf die vom pInParams-Parameter verwiesen wird, gültig sind. |
Aufgerufene Methode (optional) | Abhängig von der -Methode. Der Rückgabewert wird in der ReturnValue-Eigenschaft des __PARAMETERS instance, der die out-Parameter darstellt, platziert und über einen Aufruf von Indicate zurückgegeben. |
Aufgerufene Methodenauswertungsparameter (optional) | Abhängig von der -Methode. Out-Parameter werden in systemfremden Eigenschaften einer __PARAMETERS instance platziert und über Angeben zurückgegeben. |
Beispiele
Das folgende C++-Beispiel zeigt, wie die IWbemServices::ExecMethodAsync-Methode für die Echo-Methode der TestMeth-Klasse implementiert wird. Die TestMeth-Klasse unterstützt eine Methode, die über einen Eingabeparameter und einen Ausgabeparameter verfügt und eine 32-Bit-Ganzzahl ohne Vorzeichen zurückgibt. Bei der Implementierung wird davon ausgegangen, dass es nur eine Methode namens Echo und eine Klasse gibt, die sie enthält. Der Einfachheit halber gibt es keine Fehlerüberprüfung oder Objektpfadanalyse.
STDMETHODIMP CMyMethodProvider::ExecMethodAsync(BSTR ObjectPath,
BSTR MethodName, long lFlags, IWbemContext* pCtx,
IWbemClassObject* pInParams, IWbemObjectSink* pResultSink)
{
HRESULT hr;
IWbemClassObject * pClass = NULL;
IWbemClassObject * pOutClass = NULL;
IWbemClassObject* pOutParams;
// Allocate some BSTRs.
BSTR ClassName = SysAllocString(L"TestMeth");
BSTR InputArgName = SysAllocString(L"sInArg");
BSTR OutputArgName = SysAllocString(L"sOutArg");
BSTR retValName = SysAllocString(L"ReturnValue");
// Get the class object; this is hard-coded and matches the class
// in the MOF. A more sophisticated example would parse
// ObjectPath to determine the class and possibly the instance.
// The m_pWbemSvcs pointer is of type IWbemServices*
hr = m_pWbemSvcs->GetObject(ClassName, 0, pCtx, &pClass, NULL);
// This method returns values, and so creates an instance of the
// output argument class.
hr = pClass->GetMethod(MethodName, 0, NULL, &pOutClass);
pOutClass->SpawnInstance(0, &pOutParams);
// Copy the input argument into the output object.
VARIANT var;
VariantInit(&var);
// Get the input argument.
pInParams->Get(InputArgName, 0, &var, NULL, NULL);
// Put it into the output object.
pOutParams->Put(OutputArgName , 0, &var, 0);
long lLen = wcslen(var.bstrVal);
VariantClear(&var);
var.vt = VT_I4;
var.lVal = lLen;
// Special name for the return value.
pOutParams->Put(retValName , 0, &var, 0);
// Send the output object back to the client by the sink. Then
// release the pointers and free the strings.
hr = pResultSink->Indicate(1, &pOutParams);
pOutParams->Release();
pOutClass->Release();
pClass->Release();
SysFreeString(ClassName);
SysFreeString(InputArgName);
SysFreeString(OutputArgName);
SysFreeString(retValName);
// All done; now set the status.
hr = pResultSink->SetStatus(0,WBEM_S_NO_ERROR,NULL,NULL);
return WBEM_S_NO_ERROR;
}
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows Vista |
Unterstützte Mindestversion (Server) | Windows Server 2008 |
Zielplattform | Windows |
Kopfzeile | wbemcli.h (include Wbemidl.h) |
Bibliothek | Wbemuuid.lib |
DLL | Fastprox.dll; Esscli.dll; FrameDyn.dll; FrameDynOS.dll; Ntevt.dll; Stdprov.dll; Viewprov.dll; Wbemcomn.dll; Wbemcore.dll; Wbemess.dll; Wbemsvc.dll; Wmipicmp.dll; Wmidcprv.dll; Wmipjobj.dll; Wmiprvsd.dll |