IWbemServices::ExecMethodAsync 메서드(wbemcli.h)

IWbemServices::ExecMethodAsync 메서드는 CIM 개체에서 내보낸 메서드를 비동기적으로 실행합니다. 인바운드 매개 변수가 실행되는 적절한 공급자로 전달되는 동안 호출은 즉시 클라이언트로 반환됩니다. 정보 및 상태 제공된 개체 싱크를 통해 호출자에게 반환됩니다.

메서드는 Windows Management에서 직접 구현되지 않지만 메서드 공급자가 내보냅니다. 지정된 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입니다. 클래스 이름 또는 instance 대한 개체 경로를 사용하여 정적 메서드를 호출할 수 있습니다. 메서드 공급자는 개체 경로 매개 변수를 구문 분석하여 클래스를 확인하고 메서드 정의를 포함하는 instance 수 있습니다.

[in] strMethodName

개체의 메서드 이름입니다.

[in] lFlags

WBEM_FLAG_SEND_STATUSIWbemObjectSink::SetStatus의 클라이언트 구현을 통해 중간 상태 보고서를 수신하라는 요청을 Windows Management에 등록합니다. 공급자 구현은 동작을 변경하려면 이 플래그에 대한 중간 상태 보고를 지원해야 합니다. 여기서는 WBEM_FLAG_USE_AMENDED_QUALIFIERS 플래그를 사용할 수 없습니다.

[in] pCtx

일반적으로 NULL; 그렇지 않으면 메서드를 실행하는 공급자가 사용할 수 있는 IWbemContext 개체에 대한 포인터입니다. 컨텍스트 개체의 값은 해당 공급자에 대한 설명서에 지정해야 합니다. 이 매개 변수에 대한 자세한 내용은 WMI 호출을 참조하세요.

[in] pInParams

메서드를 실행하는 데 인바운드 매개 변수가 필요하지 않은 경우 NULL 일 수 있습니다. 그렇지 않으면 메서드 실행에 대한 인바운드 매개 변수 역할을 하는 속성을 포함하는 IWbemClassObject 개체를 가리킵니다. 개체의 내용은 메서드에 따라 지정되며 해당 공급자에 대한 사양의 일부입니다. 그러나 가장 일반적인 개체는 __Parameters 시스템 클래스의 instance. 호출할 메서드에 대한 각 입력 매개 변수에는 시스템이 아닌 속성이 하나 있습니다. 메서드 공급자는 일반적으로 브라우저 및 유사한 애플리케이션에서만 사용되는 메서드의 각 매개 변수에 연결된 ID 한정자를 무시합니다.

[in] pResponseHandler

NULL일 수 없습니다. 개체 싱크는 메서드 호출의 결과를 받습니다. 아웃바운드 매개 변수는 IWbemObjectSink::Indicate로 전송됩니다. 가장 일반적으로 반환되는 개체는 __Parameters 시스템 클래스의 instance. 반환 코드에 대한 자세한 내용은 주의 섹션을 참조하세요. 메서드 공급자를 구현할 때 IWbemObjectSink::SetStatus를 호출하기 전에 출력 매개 변수 정보를 반환하려면 Indicate를 호출하여 최종 상태 보고해야 합니다.

반환 값

이 메서드는 메서드 호출의 상태를 나타내는 HRESULT를 반환합니다. 다음 목록에는 HRESULT 내에 포함된 값이 나열되어 있습니다.

실패 시 COM 함수 GetErrorInfo에서 사용 가능한 정보를 가져올 수 있습니다.

다른 오류는 pReponseHandler 매개 변수에 제공된 개체 싱크에 비동기적으로 보고됩니다.

네트워크 문제로 인해 WMI에 대한 원격 연결이 끊어지는 경우에도 COM 관련 오류 코드가 반환될 수 있습니다.

설명

단일 메서드 공급자는 여러 클래스 및 인스턴스에 대한 메서드를 제공할 수 있습니다. 메서드 공급자는 최대 3개의 반환 값을 처리해야 합니다.

결과 집합의 끝을 나타내기 위해 IWbemObjectSink::SetStatus 메서드가 호출됩니다. IWbemObjectSink::오류 조건이 발생하는지 여부를 나타내기 위해 IWbemObjectSink에 대한 중간 호출 없이 호출할 수도 있습니다.

콜백은 클라이언트에서 요구하는 것과 동일한 인증 수준에서 반환되지 않을 수 있으므로 비동기 통신 대신 반동기를 사용하는 것이 좋습니다. 비동기 통신이 필요한 경우 메서드 호출을 참조하세요.

반환 값 Description
ExecMethodAsync (필수) pInParams 매개 변수가 가리키는 메서드의 입력 매개 변수가 유효한지 여부를 나타냅니다.
호출된 메서드(선택 사항) 메서드에 종속됩니다. 반환 값은 out 매개 변수를 나타내는 __PARAMETERS instanceReturnValue 속성에 배치되고 Indicate 호출을 통해 반환됩니다.
호출된 메서드 out 매개 변수(선택 사항) 메서드에 종속됩니다. out 매개 변수는 __PARAMETERS instance 비시스템 속성에 배치되고 Indicate를 통해 반환됩니다.
 

예제

다음 C++ 예제에서는 TestMeth 클래스의 Echo 메서드에 대해 IWbemServices::ExecMethodAsync 메서드를 구현하는 방법을 보여 줍니다. 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
헤더 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