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 參數中提供的物件接收。
如果網路問題造成您失去與 WMI 的遠端連線,也可能傳回 COM 特定的錯誤碼。
備註
單一方法提供者可為許多類別和實例提供方法。 方法提供者必須處理最多三個傳回值。
系統會呼叫 IWbemObjectSink::SetStatus 方法,以指出結果集的結尾。 它也可能呼叫,而不需對 IWbemObjectSink::指出 發生錯誤狀況。
由於回呼可能不會與用戶端所需的相同驗證層級傳回,因此建議您使用半異步而非異步通訊。 如果您需要異步通訊,請參閱 呼叫 方法。
傳回值 | 描述 |
---|---|
需要 execMethodAsync () | 指出 pInParams 參數所指向之方法的輸入參數是否有效。 |
叫用的方法 (選擇性) | 相依於方法。 傳回值會放在代表 out 參數的 __PARAMETERS 實例的 ReturnValue 屬性中,並透過對 Indicate 的呼叫傳回。 |
叫用方法輸出參數 (選擇性) | 相依於方法。 Out 參數會放在 __PARAMETERS 實例的非系統屬性中,並透過 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 |