Поделиться через


Метод IWbemClassObject::P ut (wbemcli.h)

Метод IWbemClassObject::P ut задает для именованного свойства новое значение. Этот метод всегда перезаписывает текущее значение новым. Когда IWbemClassObject указывает на определение класса CIM, Put создает или обновляет значение свойства. Если IWbemClassObject указывает на экземпляр CIM, параметр Put обновляет только значение свойства. Не удается создать значение свойства.

Пользователь не может создавать свойства с именами, которые начинаются или заканчиваются символом подчеркивания (_). Он зарезервирован для системных классов и свойств.

Синтаксис

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

Параметры

[in] wszName

Параметр, который должен указывать на допустимое имя свойства. Этот параметр не может иметь значение NULL.

[in] lFlags

Зарезервировано. Этот параметр должен иметь значение 0 (ноль).

[in] pVal

Параметр, который должен указывать на допустимую версию VARIANT, которая становится новым значением свойства. Если pVal имеет значение NULL или указывает на VARIANT типа VT_NULL, свойство имеет значение NULL, то есть не имеет значения.

[in] Type

Тип VARIANT , на который указывает pVal.

Значение NULL для свойства, обозначенного variant с типом VT_NULL , отличается от свойства типа VT_I4 со значением 0 (ноль).

Если при создании новых свойств pVal имеет значение NULL или указывает на VT_NULL, тип свойства определяется из параметра vtType .

Если pVal должен содержать внедренный объект IWbemClassObject, вызывающий объект должен вызвать IWbemClassObject::QueryInterface для IID_IUnknown и поместить полученный указатель в VARIANT с помощью типа VT_UNKNOWN. Исходный внедренный объект копируется во время операции Put и поэтому не может быть изменен операцией.

Указатель обрабатывается как доступный только для чтения. После завершения этого вызова вызывающий объект должен вызвать VariantClear .

Используйте этот параметр только при создании новых свойств в определении класса CIM, а pVal имеет значение NULL или указывает на VARIANT типа VT_NULL. В этом случае параметр vtType указывает тип CIM свойства . Во всех остальных случаях vtType должен иметь значение 0 (ноль). Кроме того, значение vtType должно иметь значение 0 (ноль), если базовый объект является экземпляром (даже если pVal имеет значение NULL), так как тип свойства является фиксированным и не может быть изменен. Иными словами, используйте vtType , если и только в том случае, если pVal имеет значение NULL или указывает на VT_NULLVARIANT, а базовым объектом является класс CIM.

При использовании IWbemClassObject::P ut для назначения пустых значений массива свойству не нужно указывать точный тип VT; Вы можете присвоить значение pVal , которое является VARIANT с типом variant VT_ARRAY|VT_VARIANT.

Возвращаемое значение

Этот метод возвращает HRESULT , указывающий состояние вызова метода. В следующем списке перечислены значения, содержащиеся в HRESULT. Общие значения HRESULT см. в разделе Системные коды ошибок.

Комментарии

Если свойство, заданное методом IWbemClassObject::P ut , существует в родительском классе, значение свойства по умолчанию изменяется, если тип свойства не соответствует типу родительского класса. Если свойство не существует и не является несоответствием типов, создается свойство .

При выполнении этого метода в экземпляре всегда происходит перезапись, так как свойство всегда существует.

При создании нового класса и базовым типом свойства является ссылка на объект, строка даты и времени или другой специальный тип, может потребоваться изменить параметр типа CIM для свойства, чтобы указать специальный новый класс. Квалификатор CIMType в свойствах экземпляра доступен только для чтения и наследуется от объекта класса .

Если тип варианта, указанный в pVal , не соответствует типу CIM свойства, WMI пытается изменить вариант на соответствующий тип варианта, используя правила приведения обычных вариантов. Если вариант не может быть приведен, возвращается WBEM_E_TYPE_MISMATCH . В следующем списке перечислены исключения из правил приведения обычных вариантов, если свойство имеет тип uint32.

Передача типа variant Результат
VT_I4 S_OK
VT_I2 WBEM_TYPE_MISMATCH
VT_R8 S_OK

Однако передача VT_R8 VT_ARRAY| в свойство типа 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
Header 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