SWbemObject.PutAsync_ 方法

SWbemObject的 PutAsync_方法會以非同步方式建立或更新實例或類別物件至 Windows Management Instrumentation (WMI) 。 您可以在 修改 SWbemObject中的任何屬性或方法之後使用此方法,並將變更寫入 WMI。

如需此語法的說明,請參閱 腳本 API 的檔慣例

語法

SWbemObject.PutAsync_( _
  ByVal objWbemSink, _
  [ ByVal iFlags ], _
  [ ByVal objWbemNamedValueSet ], _
  [ ByVal objWbemAsyncContext ] _
)

參數

objWbemSink [in]

必要。 以非同步方式接收 put 作業結果的物件接收。

iFlags [in, optional]

判斷呼叫是否建立或更新類別或實例,以及呼叫是否立即傳回。 此參數可以接受下列值。

wbemChangeFlagUpdateCompatible (0 (0x0) )

如果沒有衍生類別,而且沒有該類別的實例,則允許更新類別。 如果變更只是變更為非重要限定詞,則它也允許更新 (例如 描述 限定詞) 。 這是此呼叫的預設行為,用於與舊版 WMI 的相容性。 如果類別具有 實例,更新就會失敗。

wbemChangeFlagUpdateSafeMode (32 (0x20) )

允許更新類別,即使有子類別,如果變更不會與子類別產生衝突。 將新屬性新增至先前未在任何子類別中提及的基類時,您可以使用這個旗標。 如果類別具有 實例,更新就會失敗。

WbemChangeFlagUpdateForceMode (64 (0x40) )

當衝突的子類別存在時,強制更新類別。 例如,如果類別限定詞是在子類別中定義,而且基類嘗試新增與現有限定詞衝突,則此旗標會強制更新。 在強制模式中,刪除子類別中的衝突限定詞,即可解決此衝突。 如果類別具有 實例,更新就會失敗。

使用強制模式來更新靜態類別會導致刪除該類別的所有實例。 提供者類別上的強制更新不會刪除 類別的實例。

wbemChangeFlagCreateOrUpdate (0 (0x0) )

如果類別或實例不存在或已存在,就會建立該類別或實例。

wbemChangeFlagCreateOnly (2 (0x2) )

僅用於建立。 如果類別或實例已經存在,呼叫就會失敗。

wbemChangeFlagUpdateOnly (1 (0x1) )

導致這個呼叫更新。 類別或實例必須存在,才能成功呼叫。

wbemFlagReturnImmediately (16 (0x10) )

導致呼叫立即傳回。

wbemFlagReturnWhenComplete (0 (0x0) )

導致此呼叫封鎖,直到查詢完成為止。

wbemFlagSendStatus (128 (0x80) )

導致非同步呼叫將狀態更新傳送至物件接收的 SWbemSink.OnProgress 事件處理常式。

wbemFlagDontSendStatus (0 (0x0) )

防止非同步呼叫將狀態更新傳送至物件接收的 OnProgress 事件處理常式。

wbemFlagUseAmendedQualifiers (131072 (0x20000) )

導致 WMI 寫入類別增修條款資料以及基類定義。 如需修改限定詞的詳細資訊,請參閱 當地語系化 WMI 類別資訊

objWbemNamedValueSet [in, optional]

一般而言,這是未定義的。 否則,這是 SWbemNamedValueSet 物件,其元素代表服務要求的提供者可以使用的內容資訊。 支援或需要這項資訊的提供者必須記載已辨識的值名稱、值的資料類型、允許的值和語意。

objWbemAsyncCoNtext [in, optional]

這是 SWbemNamedValueSet 物件,會傳回物件接收,以識別原始非同步呼叫的來源。 如果您要使用相同的物件接收進行多個非同步呼叫,請使用此參數。 若要使用此參數,請建立 SWbemNamedValueSet 物件,並使用 SWbemNamedValueSet.Add 方法來新增值,以識別您進行的非同步呼叫。 這個 SWbemNamedValueSet 物件會傳回至物件接收,而且可以使用 SWbemNamedValueSet.Item 方法擷取呼叫的來源。 如需詳細資訊,請參閱 呼叫方法

傳回值

這個方法不會傳回值。 如果呼叫成功,則提供之物件接收的 OnObjectPut 事件會收到 SWbemObjectPath 物件,其中包含成功認可至 WMI 之實例或類別的物件路徑。

錯誤碼

完成 PutAsync_ 方法之後, Err 物件可能會包含下列清單中的其中一個錯誤碼。

wbemErrAccessDenied - 2147749891 (0x80041003)

目前使用者沒有更新指定類別實例的許可權。

wbemErrAlreadyExists - 2147749913 (0x80041019)

已指定 wbemChangeFlagCreateOnly 旗標,但實例已經存在。

wbemErrFailed - 2147749889 (0x80041001)

未指定的錯誤。

wbemErrIllegalNull - 2147749898 (0x8004100A)

為可能不是Nothing的屬性指定Nothing值。 這類屬性的範例是索引 索引Not_Null 限定詞所標記的屬性。

wbemErrInvalidObject - 2147749908 (0x80041014)

所指定的執行個體無效。

wbemErrInvalidParameter - 2147749896 (0x80041008)

指定的參數無效。

wbemErrNotFound - 2147749890 (0x80041002)

已指定 wbemChangeFlagUpdateOnly 旗標,但實例或類別不存在。

wbemErrIncompleteClass - 2147749920 (0x80041020)

尚未設定類別的必要屬性。

wbemErrOutOfMemory - 2147749894 (0x80041006)

記憶體不足,無法完成作業。

備註

此呼叫會立即傳回,而 put 作業的結果會透過傳遞至 objWbemSink中所指定的接收回呼傳回給呼叫端。 實作 objWbemSinkOnObjectPut 方法,可取得寫入 WMI 存放庫之實例或類別的物件路徑。 如需接收方法的詳細資訊,請參閱 呼叫方法

非同步回呼可讓未驗證的使用者將資料提供給接收。 這對您的腳本和應用程式造成安全性風險。 若要消除風險,請使用半同步或同步通訊。 如需詳細資訊,請參閱 呼叫方法

規格需求

需求
最低支援的用戶端
Windows Vista
最低支援的伺服器
Windows Server 2008
標頭
Wbemdisp.h
類型程式庫
Wbemdisp.tlb
DLL
Wbemdisp.dll
CLSID
CLSID_SWbemObject
IID
IID_ISWbemObject

另請參閱

SWbemObject

SWbemObjectPath.Class

SWbemProperty

SWbemQualifier