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中所指定的接收回呼傳回給呼叫端。 實作 objWbemSink。 OnObjectPut 方法,可取得寫入 WMI 存放庫之實例或類別的物件路徑。 如需接收方法的詳細資訊,請參閱 呼叫方法。
非同步回呼可讓未驗證的使用者將資料提供給接收。 這對您的腳本和應用程式造成安全性風險。 若要消除風險,請使用半同步或同步通訊。 如需詳細資訊,請參閱 呼叫方法。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 |
Windows Vista |
最低支援的伺服器 |
Windows Server 2008 |
標頭 |
|
類型程式庫 |
|
DLL |
|
CLSID |
CLSID_SWbemObject |
IID |
IID_ISWbemObject |