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。 クラス名またはインスタンスへのオブジェクト パスを使用して、静的メソッドを呼び出すことができます。 メソッド プロバイダーは、オブジェクト パス パラメーターを解析して、メソッド定義を含むクラスとインスタンスを決定できます。

[in] strMethodName

オブジェクトのメソッドの名前。

[in] lFlags

WBEM_FLAG_SEND_STATUS は、 IWbemObjectSink::SetStatus のクライアント実装を通じて中間状態レポートを受信する要求を Windows Management に登録します。 プロバイダーの実装では、このフラグが動作を変更するための中間状態レポートをサポートする必要があります。 ここでは、WBEM_FLAG_USE_AMENDED_QUALIFIERS フラグを使用できないことに注意してください。

[in] pCtx

通常 は NULL です。それ以外の場合、これは メソッドを実行しているプロバイダーによって使用される可能性がある IWbemContext オブジェクトへのポインターです。 コンテキスト オブジェクトの値は、該当するプロバイダーのドキュメントで指定する必要があります。 このパラメーターの詳細については、「 WMI への呼び出しの作成」を参照してください。

[in] pInParams

メソッドの実行に受信パラメーターが必要ない場合は NULL を指定できます。 それ以外の場合は、メソッド実行の受信パラメーターとして機能するプロパティを含む IWbemClassObject オブジェクトを指します。 オブジェクトの内容はメソッド固有であり、問題のプロバイダーの仕様の一部です。 ただし、最も一般的なオブジェクトは 、__Parameters システム クラスのインスタンスです。 呼び出されるメソッドへの入力パラメーターごとに、システム以外のプロパティが 1 つあります。 メソッド プロバイダーは、メソッド内の各パラメーターにアタッチされている ID 修飾子を無視します。これは通常、ブラウザーと同様のアプリケーションでのみ使用されます。

[in] pResponseHandler

NULL にすることはできません。 オブジェクト シンクは、メソッド呼び出しの結果を受け取ります。 送信パラメーターは IWbemObjectSink::Indicate に送信されます。 返される最も一般的なオブジェクトは、 __Parameters システム クラスのインスタンスです。 リターン コードの詳細については、「解説」セクションを参照してください。 メソッド プロバイダーを実装する場合は、IWbemObjectSink::SetStatus を呼び出して最終的な状態を報告する前に、 Indicate を呼び出して出力パラメーター情報を返す必要があります。

戻り値

このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。 次の一覧は、 HRESULT 内に含まれる値の一覧です。

失敗した場合は、COM 関数 GetErrorInfo から使用可能な情報を取得できます。

その他のエラーは、 pReponseHandler パラメーターで指定されたオブジェクト シンクに非同期的に報告されます。

ネットワークの問題によって WMI へのリモート接続が失われると、COM 固有のエラー コードも返される可能性があります。

注釈

1 つのメソッド プロバイダーは、多くのクラスとインスタンスのメソッドを提供できます。 メソッド プロバイダーは、最大 3 つの戻り値を処理する必要があります。

IWbemObjectSink::SetStatus メソッドは、結果セットの末尾を示すために呼び出されます。 また、 IWbemObjectSink::エラー 状態が発生したかどうかを示す呼び出しなしで呼び出すこともできます。

コールバックはクライアントが必要とするのと同じ認証レベルで返されない可能性があるため、非同期通信の代わりに半同期を使用することをお勧めします。 非同期通信が必要な場合は、「 メソッドの呼び出し」を参照してください。

戻り値 説明
ExecMethodAsync (必須) pInParams パラメーターが指すメソッドの入力パラメーターが有効かどうかを示します。
呼び出されたメソッド (省略可能) メソッドに依存します。 戻り値は、out パラメーターを表す__PARAMETERS インスタンスの ReturnValue プロパティに配置され、Indicate の呼び出しを通じて返されます。
呼び出されたメソッド出力パラメーター (省略可能) メソッドに依存します。 出力パラメーターは、 __PARAMETERS インスタンスのシステム以外のプロパティに配置され、 Indicate によって返されます。
 

次の C++ の例は、TestMeth クラスの Echo メソッドに IWbemServices::ExecMethodAsync メソッドを実装する方法を示しています。 TestMeth クラスは、1 つの入力パラメーターと 1 つの出力パラメーターを持ち、符号なし 32 ビット整数を返すメソッドをサポートしています。 実装では、 Echo と呼ばれるメソッドが 1 つだけあり、それを含むクラスが 1 つしかないと想定しています。 簡潔にするために、エラー チェックやオブジェクト パスの解析はありません。

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 を含む)
Library 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