iWbemObjectSink::SetStatus 方法 (wbemcli.h)
IWbemObjectSink::SetStatus 方法是由來源呼叫,以指出通知序列的結尾,或將其他狀態代碼傳送至接收。 呼叫 SetStatus 之前,IWbemObjectSink::Indicate 方法可能或可能尚未呼叫。
一般而言,用戶端會實作 IWbemObjectSink 介面,並執行 IWbemServices 方法,以使用 IWbemObjectSink 介面傳回其結果。 在此作業期間,WMI 呼叫 會指出 所需次數,後面接著 SetStatus 的最終呼叫,在許多情況下, 即 Release。
語法
HRESULT SetStatus(
[in] long lFlags,
[in] HRESULT hResult,
[in] BSTR strParam,
[in] IWbemClassObject *pObjParam
);
參數
[in] lFlags
狀態資訊的位掩碼。 檢查 hResult 參數即可取得作業的狀態。
WBEM_STATUS_COMPLETE
作業已完成。
WBEM_STATUS_PROGRESS
作業仍在進行。
WBEM_STATUS_REQUIREMENTS
用於啟用篩選後。
[in] hResult
此參數設定為異步操作或通知的 HRESULT 。 如果發生錯誤,或異步呼叫上所做的進度量,這是錯誤碼。
[in] strParam
如果原始異步操作傳回字串,則會接收只讀 BSTR 的指標。 例如,使用 PutInstanceAsync 時, 會呼叫 SetStatus ,並將此參數設定為新建立實例的物件路徑。
[in] pObjParam
如果傳回複雜的錯誤或狀態物件,這會包含錯誤物件的指標。 如果 SetStatus 傳回之後需要物件,則呼叫的對象必須在指標上使用 AddRef 方法,才能傳回呼叫的物件。
傳回值
這個方法會傳回 HRESULT ,指出方法呼叫的狀態。 下列清單列出 HRESULT 中包含的值。
備註
實作事件訂閱接收 (IWbemObjectSink 或 IWbemEventSink) 時,請勿從接收物件的 SetStatus 方法內呼叫 WMI。 例如,從 SetStatus 實作內呼叫 IWbemServices::CancelAsyncCall 可能會干擾 WMI 狀態。 若要取消事件訂閱,請設定旗標,並從另一個線程或物件呼叫 IWbemServices::CancelAsyncCall 。 對於與事件接收無關的實作,例如物件、列舉和查詢擷取,您可以回呼 WMI。
接收實作應該會在 100 MSEC 內處理事件通知,因為傳遞事件通知的 WMI 線程無法在接收物件完成處理之前執行其他工作。 如果通知需要大量處理,接收可以使用內部佇列處理另一個線程來處理處理。 對於與事件接收無關的實作,例如物件、列舉和查詢擷取,您可以回呼 WMI。
若要透過用戶端的 SetStatus 實作接收中繼狀態更新,您必須在呼叫提供者/服務方法時指定 WBEM_FLAG_SENT_STATUS 。 您可以分別檢查 hResult 的 HIWORD 和 LOWORD 值來判斷確切的狀態。 LOWORD (hResult) 值包含到目前為止所做的進度量,而 HIWORD (hResult) 值包含總計。
如果您未在呼叫提供者或服務方法時指定 WBEM_FLAG_SEND_STATUS ,您保證會收到一個和一個 SetStatus 呼叫。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows Vista |
最低支援的伺服器 | Windows Server 2008 |
目標平台 | Windows |
標頭 | wbemcli.h (包含 Wbemidl.h) |
程式庫 | Wbemuuid.lib |
Dll | Fastprox.dll |