Condividi tramite


Metodo IWbemServices::ExecMethodAsync (wbemcli.h)

Il metodo IWbemServices::ExecMethodAsync esegue in modo asincrono un metodo esportato da un oggetto CIM. La chiamata restituisce immediatamente al client mentre i parametri in ingresso vengono inoltrati al provider appropriato in cui viene eseguito. Le informazioni e lo stato vengono restituiti al chiamante tramite il sink di oggetti fornito.

I metodi non vengono implementati direttamente da Gestione Windows, ma vengono esportati dai provider di metodi. Per qualsiasi classe CIM specificata, i metodi disponibili e i relativi parametri fanno parte della documentazione per il provider in questione.

Sintassi

HRESULT ExecMethodAsync(
  [in] const BSTR       strObjectPath,
  [in] const BSTR       strMethodName,
  [in] long             lFlags,
  [in] IWbemContext     *pCtx,
  [in] IWbemClassObject *pInParams,
  [in] IWbemObjectSink  *pResponseHandler
);

Parametri

[in] strObjectPath

BSTR valido contenente il percorso dell'oggetto per cui deve essere eseguito il metodo. È possibile richiamare un metodo statico usando un nome di classe o un percorso dell'oggetto a un'istanza. Il provider di metodi può analizzare il parametro del percorso dell'oggetto per determinare la classe e l'istanza che contengono la definizione del metodo.

[in] strMethodName

Nome del metodo per l'oggetto.

[in] lFlags

WBEM_FLAG_SEND_STATUS registra con Windows Management una richiesta di ricezione di report sullo stato intermedio tramite l'implementazione dei client di IWbemObjectSink::SetStatus. L'implementazione del provider deve supportare la segnalazione dello stato intermedio per questo flag per modificare il comportamento. Si noti che il flag di WBEM_FLAG_USE_AMENDED_QUALIFIERS non può essere usato qui.

[in] pCtx

In genere NULL; in caso contrario, si tratta di un puntatore a un oggetto IWbemContext che può essere usato dal provider che esegue il metodo. I valori nell'oggetto contesto devono essere specificati nella documentazione del provider in questione. Per altre informazioni su questo parametro, vedere Creazione di chiamate a WMI.

[in] pInParams

Può essere NULL se non sono necessari parametri in ingresso per eseguire il metodo. In caso contrario, questo punta a un oggetto IWbemClassObject che contiene le proprietà che fungono da parametri in ingresso per l'esecuzione del metodo. Il contenuto dell'oggetto è specifico del metodo e fa parte della specifica per il provider in questione. Tuttavia, l'oggetto più comune è un'istanza della classe di sistema __Parameters . Per ogni parametro di input da chiamare il metodo, esiste una proprietà non di sistema. I provider di metodi ignorano i qualificatori ID collegati a ogni parametro nel metodo, che vengono in genere usati solo dai browser e dalle applicazioni simili.

[in] pResponseHandler

Impossibile essere NULL. Il sink dell'oggetto riceve il risultato della chiamata al metodo. I parametri in uscita vengono inviati a IWbemObjectSink::Indicate. L'oggetto restituito più comune è un'istanza della classe di sistema __Parameters . Per altre informazioni sui codici restituiti, vedere la sezione Osservazioni. Quando si implementa un provider di metodi, è necessario chiamare Indica per restituire le informazioni sui parametri di output prima di chiamare IWbemObjectSink::SetStatus per segnalare lo stato finale.

Valore restituito

Questo metodo restituisce un valore HRESULT che indica lo stato della chiamata al metodo. L'elenco seguente elenca il valore contenuto in un HRESULT.

In caso di errore, è possibile ottenere informazioni disponibili dalla funzione COM GetErrorInfo.

Altri errori vengono segnalati in modo asincrono al sink di oggetti fornito nel parametro pReponseHandler .

I codici di errore specifici di COM possono essere restituiti anche se i problemi di rete causano la perdita della connessione remota a WMI.

Commenti

Un singolo provider di metodi può fornire metodi per molte classi e istanze. I provider di metodi devono gestire un massimo di tre valori restituiti.

Il metodo IWbemObjectSink::SetStatus viene chiamato per indicare la fine del set di risultati. Può anche essere chiamato senza chiamate di intervento a IWbemObjectSink::Indica se si verificano condizioni di errore.

Poiché il callback potrebbe non essere restituito allo stesso livello di autenticazione richiesto dal client, è consigliabile usare semisynchrono anziché la comunicazione asincrona. Se è necessaria la comunicazione asincrona, vedere Chiamata di un metodo.

Valori restituiti Descrizione
ExecMethodAsync (obbligatorio) Indica se i parametri di input per il metodo a cui punta il parametro pInParams sono validi.
Metodo richiamato (facoltativo) Dipendente dal metodo . Il valore restituito viene inserito nella proprietà ReturnValue dell'istanza di __PARAMETERS che rappresenta i parametri out e restituiti tramite una chiamata a Indicare.
Parametri del metodo richiamati (facoltativo) Dipendente dal metodo . I parametri out vengono inseriti in proprietà non di sistema di un'istanza di __PARAMETERS e restituite tramite Indica.
 

Esempio

Nell'esempio C++ seguente viene illustrato come implementare il metodo IWbemServices::ExecMethodAsync per il metodo Echo della classe TestMeth . La classe TestMeth supporta un metodo con un parametro di input e un parametro di output e che restituisce un intero senza segno a 32 bit. L'implementazione presuppone che esista un solo metodo denominato Echo e una classe che la contiene. Per motivi di brevità, non esiste alcun controllo degli errori o l'analisi del percorso dell'oggetto.

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;
}

Requisiti

Requisito Valore
Client minimo supportato Windows Vista
Server minimo supportato Windows Server 2008
Piattaforma di destinazione Windows
Intestazione wbemcli.h (include Wbemidl.h)
Libreria 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

Vedi anche

Chiamata di un metodo

IWbemCallResult::GetResultObject

Iwbemservices

IWbemServices::ExecMethodAsync