Método IWbemServices::ExecMethodAsync (wbemcli.h)

El método IWbemServices::ExecMethodAsync ejecuta asincrónicamente un método exportado por un objeto CIM. La llamada vuelve inmediatamente al cliente mientras se reenvía los parámetros de entrada al proveedor adecuado donde se ejecuta. La información y el estado se devuelven al autor de la llamada a través del receptor de objetos proporcionado.

Los proveedores de métodos no implementan directamente los métodos de administración de Windows, pero los proveedores de métodos los exportan. Para cualquier clase CIM determinada, los métodos disponibles y sus parámetros forman parte de la documentación del proveedor en cuestión.

Sintaxis

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

Parámetros

[in] strObjectPath

BSTR válido que contiene la ruta de acceso del objeto para el que se va a ejecutar el método. Puede invocar un método estático mediante un nombre de clase o una ruta de acceso de objeto a una instancia. El proveedor de métodos puede analizar el parámetro de ruta de acceso del objeto para determinar la clase y la instancia que contienen la definición del método.

[in] strMethodName

Nombre del método para el objeto.

[in] lFlags

WBEM_FLAG_SEND_STATUS registra con administración de Windows una solicitud para recibir informes de estado intermedios a través de la implementación de los clientes de IWbemObjectSink::SetStatus. La implementación del proveedor debe admitir informes de estado intermedios para que esta marca cambie el comportamiento. Tenga en cuenta que la marca WBEM_FLAG_USE_AMENDED_QUALIFIERS no se puede usar aquí.

[in] pCtx

Normalmente NULL; de lo contrario, se trata de un puntero a un objeto IWbemContext que puede usar el proveedor que ejecuta el método . Los valores del objeto de contexto deben especificarse en la documentación del proveedor en cuestión. Para obtener más información sobre este parámetro, vea Realizar llamadas a WMI.

[in] pInParams

Puede ser NULL si no se requiere ningún parámetro de entrada para ejecutar el método . De lo contrario, esto apunta a un objeto IWbemClassObject que contiene las propiedades que actúan como parámetros de entrada para la ejecución del método. El contenido del objeto es específico del método y forma parte de la especificación del proveedor en cuestión. Sin embargo, el objeto más común es una instancia de la clase del sistema __Parameters . Para cada parámetro de entrada al método al que se va a llamar, hay una propiedad que no es del sistema. Los proveedores de métodos omiten los calificadores de identificador adjuntos a cada parámetro del método , que normalmente solo usan los exploradores y las aplicaciones similares.

[in] pResponseHandler

No puede ser NULL. El receptor del objeto recibe el resultado de la llamada al método. Los parámetros de salida se envían a IWbemObjectSink::Indicate. El objeto devuelto más común es una instancia de la clase del sistema __Parameters . Para obtener más información sobre los códigos de retorno, vea la sección Comentarios. Al implementar un proveedor de métodos, debe llamar a Indicar para devolver información de parámetros de salida antes de llamar a IWbemObjectSink::SetStatus para notificar el estado final.

Valor devuelto

Este método devuelve un valor HRESULT que indica el estado de la llamada al método. En la lista siguiente se muestra el valor contenido en un HRESULT.

Si se produce un error, puede obtener cualquier información disponible de la función COM GetErrorInfo.

Otros errores se notifican de forma asincrónica al receptor de objetos proporcionado en el parámetro pReponseHandler .

También se pueden devolver códigos de error específicos de COM si los problemas de red hacen que pierda la conexión remota a WMI.

Comentarios

Un único proveedor de métodos puede proporcionar métodos para muchas clases e instancias. Los proveedores de métodos tienen que tratar con un máximo de tres valores devueltos.

Se llama al método IWbemObjectSink::SetStatus para indicar el final del conjunto de resultados. También se puede llamar a sin llamadas intermedias a IWbemObjectSink::Indicar si se producen condiciones de error.

Dado que es posible que la devolución de llamada no se devuelva en el mismo nivel de autenticación que requiere el cliente, se recomienda usar semisincrónica en lugar de comunicación asincrónica. Si necesita comunicación asincrónica, consulte Llamar a un método.

Valores devueltos Descripción
ExecMethodAsync (obligatorio) Indica si los parámetros de entrada del método al que apunta el parámetro pInParams son válidos o no.
Método invocado (opcional) Depende del método . El valor devuelto se coloca en la propiedad ReturnValue de la instancia de __PARAMETERS que representa los parámetros out y se devuelve a través de una llamada a Indicate.
Parámetros de salida del método invocado (opcional) Depende del método . Los parámetros out se colocan en propiedades que no son del sistema de una instancia de __PARAMETERS y se devuelven a través de Indicar.
 

Ejemplos

En el siguiente ejemplo de C++ se muestra cómo implementar el método IWbemServices::ExecMethodAsync para el método Echo de la clase TestMeth . La clase TestMeth admite un método que tiene un parámetro de entrada y un parámetro de salida y que devuelve un entero de 32 bits sin signo. La implementación supone que solo hay un método denominado Echo y una clase que lo contiene. Por motivos de brevedad, no hay ninguna comprobación de errores ni análisis de ruta de acceso de objeto.

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

Requisitos

Requisito Value
Cliente mínimo compatible Windows Vista
Servidor mínimo compatible Windows Server 2008
Plataforma de destino Windows
Encabezado wbemcli.h (include Wbemidl.h)
Library Wbemuuid.lib
Archivo 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

Consulte también

Llamada a un método

IWbemCallResult::GetResultObject

IWbemServices

IWbemServices::ExecMethodAsync