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 系统类的实例。 对于要调用的方法的每个输入参数,都有一个非系统属性。 方法提供程序忽略附加到方法中每个参数的 ID 限定符,这些限定符通常仅由浏览器和类似应用程序使用。
[in] pResponseHandler
不能为 NULL。 对象接收器接收方法调用的结果。 出站参数将发送到 IWbemObjectSink::Indicate。 最常见的返回对象是 __Parameters 系统类的实例。 有关返回代码的详细信息,请参阅“备注”部分。 实现方法提供程序时,在调用 IWbemObjectSink::SetStatus 报告最终状态之前,应调用指示以返回输出参数信息。
返回值
此方法返回指示方法调用状态的 HRESULT。 以下列表列出了 HRESULT 中包含的值。
如果失败,可以从 COM 函数 GetErrorInfo 获取任何可用信息。
其他错误以异步方式报告给 pReponseHandler 参数中提供的对象接收器。
如果网络问题导致你失去与 WMI 的远程连接,也可能会返回特定于 COM 的错误代码。
注解
单个方法提供程序可以为许多类和实例提供方法。 方法提供程序必须处理最多三个返回值。
调用 IWbemObjectSink::SetStatus 方法以指示结果集的结束。 也可以调用它,而无需对 IWbemObjectSink::指示 是否发生错误条件。
由于回调可能不会在客户端要求的相同身份验证级别返回,因此建议使用半同步通信而不是异步通信。 如果需要异步通信,请参阅 调用方法。
返回值 | 说明 |
---|---|
需要 execMethodAsync () | 指示 pInParams 参数指向的方法的输入参数是否有效。 |
调用的方法 (可选) | 依赖于 方法。 返回值放置在表示 out 参数的 __PARAMETERS 实例的 ReturnValue 属性中,并通过调用指示返回。 |
调用的方法输出参数 (可选) | 依赖于 方法。 out 参数放置在 __PARAMETERS 实例的非系统属性中,并通过 指示返回。 |
示例
以下 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) |
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 |