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

Weitere Informationen

Aufrufen einer Methode

IWbemCallResult::GetResultObject

IWbemServices

IWbemServices::ExecMethodAsync