Метод IWbemServices::ExecMethodAsync (wbemcli.h)

Метод IWbemServices::ExecMethodAsync асинхронно выполняет метод, экспортируемый объектом CIM. Вызов немедленно возвращается клиенту, а входящие параметры перенаправляются соответствующему поставщику, где он выполняется. Сведения и состояние возвращаются вызывающей объекту через предоставленный приемник объекта.

Методы не реализуются непосредственно службой управления Windows, но экспортируются поставщиками методов. Для любого класса CIM доступные методы и их параметры являются частью документации для соответствующего поставщика.

Синтаксис

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

Параметры

[in] strObjectPath

Допустимый BSTR , содержащий путь к объекту , для которого выполняется метод. Статический метод можно вызвать, используя имя класса или путь к объекту к экземпляру. Поставщик метода может проанализировать параметр пути к объекту, чтобы определить класс и экземпляр, содержащие определение метода.

[in] strMethodName

Имя метода для объекта .

[in] lFlags

WBEM_FLAG_SEND_STATUS регистрирует в управлении Windows запрос на получение промежуточных отчетов о состоянии через реализацию IWbemObjectSink::SetStatus. Реализация поставщика должна поддерживать промежуточные отчеты о состоянии для этого флага, чтобы изменить поведение. Обратите внимание, что здесь нельзя использовать флаг WBEM_FLAG_USE_AMENDED_QUALIFIERS .

[in] pCtx

Обычно — NULL; В противном случае это указатель на объект IWbemContext , который может использоваться поставщиком, выполняющим метод . Значения в объекте контекста должны быть указаны в документации для соответствующего поставщика. Дополнительные сведения об этом параметре см. в статье Вызовы WMI.

[in] pInParams

Может иметь значение NULL , если для выполнения метода не требуются входящие параметры. В противном случае это указывает на объект IWbemClassObject , содержащий свойства, действующие в качестве входящих параметров для выполнения метода. Содержимое объекта зависит от метода и является частью спецификации для соответствующего поставщика. Однако наиболее распространенным объектом является экземпляр системного класса __Parameters . Для каждого входного параметра вызываемого метода существует одно несистемное свойство. Поставщики методов игнорируют квалификаторы идентификаторов , присоединенные к каждому параметру в методе, которые обычно используются только браузерами и аналогичными приложениями.

[in] pResponseHandler

Не может иметь значение NULL. Приемник объекта получает результат вызова метода . Исходящие параметры отправляются в IWbemObjectSink::Indicate. Наиболее распространенным возвращаемым объектом является экземпляр системного класса __Parameters . Дополнительные сведения о кодах возврата см. в разделе Примечания. При реализации поставщика метода необходимо вызвать метод Indicate для возврата сведений о выходных параметрах перед вызовом IWbemObjectSink::SetStatus , чтобы сообщить об окончательном состоянии.

Возвращаемое значение

Этот метод возвращает HRESULT , указывающий состояние вызова метода. В следующем списке перечислены значения, содержащиеся в HRESULT.

При сбое можно получить любые доступные сведения из функции COM GetErrorInfo.

Другие ошибки асинхронно передаются в приемник объектов, указанный в параметре pReponseHandler .

Коды ошибок, относящихся к COM, также могут быть возвращены, если проблемы с сетью приводят к потере удаленного подключения к WMI.

Комментарии

Один поставщик метода может предоставлять методы для многих классов и экземпляров. Поставщики методов должны иметь дело с не более чем тремя возвращаемыми значениями.

Вызывается метод IWbemObjectSink::SetStatus , чтобы указать конец результирующих наборов. Он также может вызываться без промежуточных вызовов IWbemObjectSink::Указывает , возникают ли ошибки.

Так как обратный вызов может быть возвращен не на том же уровне проверки подлинности, который требуется клиенту, рекомендуется использовать полусинхронный режим вместо асинхронного взаимодействия. Если требуется асинхронное взаимодействие, см. статью Вызов метода .

Возвращаемые значения Описание
ExecMethodAsync (обязательно) Указывает, допустимы ли входные параметры метода, на которые указывает параметр pInParams .
Вызываемый метод (необязательно) Зависит от метода . Возвращаемое значение помещается в свойство ReturnValue экземпляра __PARAMETERS , представляющего параметры out, и возвращается с помощью вызова Метода Показать.
Параметры вывода вызываемого метода (необязательно) Зависит от метода . Параметры out помещаются в несистемные свойства экземпляра __PARAMETERS и возвращаются с помощью метода Показать.
 

Примеры

В следующем примере C++ показано, как реализовать метод IWbemServices::ExecMethodAsync для метода Echo класса TestMeth . Класс TestMeth поддерживает метод, имеющий один входной и один выходной параметр и возвращающий 32-разрядное целое число без знака. Реализация предполагает, что существует только один метод с именем Echo и один класс, содержащий его. Для краткости не выполняется проверка ошибок или анализ пути объекта.

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

Требования

Требование Значение
Минимальная версия клиента Windows Vista
Минимальная версия сервера Windows Server 2008
Целевая платформа Windows
Header wbemcli.h (включая Wbemidl.h)
Библиотека 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

См. также раздел

Вызов метода

IWbemCallResult::GetResultObject

IWbemServices

IWbemServices::ExecMethodAsync