(wbemcli.h) IWbemClassObject::P ut 方法

IWbemClassObject::P ut 方法會將具名屬性設定為新的值。 這個方法一律會以新的值覆寫目前的值。 當 IWbemClassObject 指向 CIM 類別定義時, Put 會建立或更新屬性值。 當 IWbemClassObject 指向 CIM 實例時, Put 只會更新屬性值。 Put 無法建立屬性值。

用戶無法建立名稱開頭或結尾為底線的屬性 (_) 。 這會保留給系統類別和屬性。

語法

HRESULT Put(
  [in] LPCWSTR wszName,
  [in] long    lFlags,
  [in] VARIANT *pVal,
  [in] CIMTYPE Type
);

參數

[in] wszName

必須指向有效屬性名稱的參數。 此參數不可為 NULL

[in] lFlags

保留的。 此參數必須是 0 (零) 。

[in] pVal

必須指向有效 VARIANT 的參數,這會成為新的屬性值。 如果 pValNULL 或指向類型為 VT_NULLVARIANT,則 屬性會設定為 NULL,也就是沒有值。

[in] Type

pVal 指向的 VARIANT 類型。

VT_NULL類型VARIANT 所指定之屬性的 NULL 值與類型為 0 (零) 值之類型VT_I4的屬性不同。

建立新屬性時,如果 pValNULL 或指向 VT_NULL,則會從 vtType 參數決定屬性的類型。

如果 pVal 是要包含內嵌的 IWbemClassObject,呼叫端必須呼叫 IWbemClassObject::QueryInterface for IID_IUnknown,並使用類型VT_UNKNOWN將產生的指標放在 VARIANT 中。 原始內嵌物件會在 Put 作業期間複製,因此無法由作業修改。

指標會被視為唯讀。 呼叫端必須在完成此呼叫之後呼叫 VariantClear

只有在 CIM 類別定義中建立新屬性,且 pValNULL,或指向類型為 VT_NULLVARIANT 時,才使用此參數。 在這種情況下, vtType 參數會指定 屬性的 CIM 類型。 在其他情況下, vtType 必須是 0 (零) 。 此外,當基礎對像是 (實例時, vtType 必須是 0 (零) ,即使 pValNULL) ,因為屬性的類型是固定的且無法變更。 換句話說,只有在 pValNULL 或指向 VT_NULLVARIANT,而且基礎對像是 CIM 類別時,才使用 vtType

使用 IWbemClassObject::P ut 將空數位值指派給屬性時,您不需要指定確切的 VT 類型;您可以將值指派給 pVal,其 VARIANT 類型為 VT_ARRAY VT_VARIANT|。

傳回值

這個方法會傳回 HRESULT ,指出方法呼叫的狀態。 下列清單列出 HRESULT 中包含的值。 如需一般 HRESULT 值,請參閱 系統錯誤碼

備註

如果 IWbemClassObject::P ut 方法所設定的屬性存在於父類別中,除非屬性類型不符合父類別類型,否則屬性的預設值會變更。 如果屬性不存在,而且不是型別不符,則會建立屬性。

在實例上執行這個方法時,一律會發生覆寫,因為 屬性一律存在。

建立新的類別,而屬性的基礎類型是對象參考、日期/時間字串或其他特殊類型時,您可能需要修改屬性的 CIM 類型參數,以指出特殊的新類別。 實例屬性上的 CIMType 限定符是唯讀的,而且繼承自類別物件。

如果 pVal 中指定的變體類型與 屬性的 CIM 類型不符,WMI 會嘗試使用一般變體強制型轉規則,將變體變更為適當的變體類型。 如果無法強制強制變數,則會傳回 WBEM_E_TYPE_MISMATCH 。 下列清單列出屬性類型 為 uint32 時,一般變體強制型轉規則的例外狀況。

傳入變體類型 結果
VT_I4 S_OK
VT_I2 WBEM_TYPE_MISMATCH
VT_R8 S_OK

不過,將 VT_ARRAY|VT_R8 傳入 uint32[] 類型的屬性將會失敗。

 

__CLASS系統屬性只能在類別建立期間寫入,但可能未保留空白時。 其餘所有系統屬性都是唯讀屬性。

範例

下列程式代碼範例示範如何設定新 CIM 類別的類別名稱。

// pObj is an empty object from IWbemServices::GetObject
// Set up the property value.
VARIANT v; 
VariantInit(&v);
V_VT(&v) = VT_BSTR;
V_BSTR(&v) = SysAllocString(L"MyClass");

// Write it.
LPCWSTR strClassProp = L"__CLASS";
pObj->Put(strClassProp, 0, &v, 0);

// Clean up.
VariantClear(&v);

下列程式代碼範例示範如何設定 SomeUint64 屬性的值。 請注意 ,BSTR 值必須是十進位格式,而不是十六進位。

// pObj is an instance containing a uint64 property
// Set up the property value.
VARIANT v; 
VariantInit(&v);
V_VT(&v) = VT_BSTR;
V_BSTR(&v) = SysAllocString(L"1033"); // - decimal format, not hex

// Write it.
LPCWSTR strClassProp = L"SomeUint64";
pObj->Put(strClassProp, 0, &v, CIM_UINT64);

// Clean up.
VariantClear(&v);

規格需求

需求
最低支援的用戶端 Windows Vista
最低支援的伺服器 Windows Server 2008
目標平台 Windows
標頭 wbemcli.h (包含 Wbemidl.h)
程式庫 WbemUuid.lib
Dll CIMWin32.dll;Esscli.dll;Fastprox.dll;FrameDyn.dll;FrameDynOS.dll;Krnlprov.dll;Ncprov.dll;Wbemcore.dll;Wbemess.dll;Wmipiprt.dll

另請參閱

IUnknown::QueryInterface

IWbemClassObject

WMI 限定符

WMI 系統類別

WMI 系統屬性