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


Метод IWbemServices::P utClassAsync (wbemcli.h)

Метод IWbemServices::P utClassAsync создает новый класс или обновляет существующий. Класс, заданный параметром pObject , должен быть правильно инициализирован всеми необходимыми значениями свойств. Вызов немедленно возвращается. Успешное или неудачное выполнение предоставляется приемнику объектов, заданному параметром pResponseHandler .

Синтаксис

HRESULT PutClassAsync(
  [in] IWbemClassObject *pObject,
  [in] long             lFlags,
  [in] IWbemContext     *pCtx,
  [in] IWbemObjectSink  *pResponseHandler
);

Параметры

[in] pObject

Указатель на объект, содержащий определение класса.

[in] lFlags

Одно или несколько из следующих значений являются допустимыми.

WBEM_FLAG_USE_AMENDED_QUALIFIERS

Если этот флаг установлен, WMI не сохраняет квалификаторы с измененным вкусом . Если этот флаг не задан, предполагается, что этот объект не локализован и все квалификаторы хранятся вместе с этим экземпляром.

WBEM_FLAG_CREATE_OR_UPDATE

Этот флаг вызывает создание этого класса, если он не существует, или перезаписывается, если он уже существует.

WBEM_FLAG_UPDATE_ONLY

Обновления существующий класс.

WBEM_FLAG_CREATE_ONLY

Этот флаг предназначен только для создания класса. Вызов завершается ошибкой, если класс уже существует.

WBEM_FLAG_SEND_STATUS

Этот флаг регистрирует в службе управления Windows запрос на получение промежуточных отчетов о состоянии с помощью клиентской реализации IWbemObjectSink::SetStatus. Реализация поставщика должна поддерживать промежуточные отчеты о состоянии для этого флага, чтобы изменить поведение.

WBEM_FLAG_OWNER_UPDATE

Поставщики push-уведомлений должны указывать этот флаг при вызове PutClassAsync , чтобы указать, что этот класс изменился.

WBEM_FLAG_UPDATE_COMPATIBLE

Этот флаг позволяет обновлять класс, если нет производных классов и нет экземпляров для этого класса. Кроме того, он позволяет выполнять обновления во всех случаях, если изменение относится только к неважным квалификаторам (например, квалификатор описания ). Это поведение по умолчанию для этого вызова и используется для совместимости с предыдущими версиями управления Windows. Если класс имеет экземпляры или изменения относятся к важным квалификаторам, обновление завершается сбоем.

WBEM_FLAG_UPDATE_SAFE_MODE

Этот флаг позволяет обновлять классы, даже если есть дочерние классы, если изменение не вызывает никаких конфликтов с дочерними классами. Примером обновления этого флага будет добавление нового свойства в базовый класс, который ранее не упоминался ни в одном из дочерних классов. Если у класса есть экземпляры, обновление завершается ошибкой.

WBEM_FLAG_UPDATE_FORCE_MODE

Этот флаг принудительно обновляет классы при наличии конфликтующих дочерних классов. Примером принудительного обновления этого флага будет, если квалификатор класса был определен в дочернем классе, а базовый класс пытался добавить тот же квалификатор, который конфликтует с существующим. В принудительном режиме этот конфликт будет устранен путем удаления конфликтующего квалификатора в дочернем классе.

[in] pCtx

Как правило, значение NULL. В противном случае это указатель на объект IWbemContext , который может использоваться поставщиком, получающим запрошенный класс. Значения в объекте контекста должны быть указаны в документации для соответствующего поставщика. Дополнительные сведения об этом параметре см. в статье Вызовы WMI.

[in] pResponseHandler

Указатель на реализацию вызывающего объекта IWbemObjectSink. Этот обработчик получает состояние запроса Put , когда состояние становится доступным с помощью метода SetStatus . Если возвращается какой-либо код ошибки, предоставленный указатель IWbemObjectSink не используется. Если возвращается WBEM_S_NO_ERROR , вызывается реализация IWbemObjectSink пользователя, чтобы указать результат операции. Управление Windows вызывает AddRef в указатель только в тех случаях, когда возвращается WBEM_S_NO_ERROR . В случаях, когда возвращается код ошибки, количество ссылок совпадает с числом ссылок при записи. Подробное описание этого параметра см. в разделе Вызов метода .

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

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

Другие коды состояния или ошибки передаются приемнику объектов, заданному параметром pReponseHandler .

Коды ошибок, относящихся к COM, также могут быть возвращены, если проблемы с сетью приводят к потере удаленного подключения к управлению Windows.

Обратите внимание, что если PutInstanceAsync возвращает WBEM_S_NO_ERROR, WMI ожидает результата от метода SetStatus обработчика ответа. WMI ожидает неограниченное время при локальном подключении или до истечения времени ожидания удаленного подключения.

Так как возврат WBEM_E_FAILED приводит к тому, что другие поставщики не имеют возможности создать класс, он должен возвращаться только в том случае, если поставщик класса завершился сбоем таким образом, что может быть выполнено успешно.

Примечание Непредсказуемое поведение приведет к изменению определений классов, когда они используются клиентами или поставщиками. Метод IWbemServices::P utClass следует использовать только для создания или обновления класса, если в настоящее время нет клиентов или поставщиков, использующих этот класс.
 

Комментарии

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

Вызывается метод IWbemObjectSink::SetStatus , чтобы указать конец результирующих наборов. Он также может вызываться без промежуточных вызовов IWbemObjectSink::Указывает , возникают ли ошибки.

Так как обратный вызов может быть возвращен не на том же уровне проверки подлинности, который требуется клиенту, рекомендуется использовать полусинхронный режим вместо асинхронного взаимодействия. Если требуется асинхронное взаимодействие, см. статью Вызов метода .

Дополнительные сведения об использовании методов полусинхронно см. в разделах IWbemServices::P utClass и Вызов метода.

Примеры

В следующем примере кода описывается простая реализация PutClassAsync.

HRESULT CStdProvider::PutClassAsync( 
            /* [in] */ IWbemClassObject __RPC_FAR *pObject,
            /* [in] */ long lFlags,
            /* [in] */ IWbemContext __RPC_FAR *pCtx,
            /* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler
            )
{
    // You must implement the ClassIsValid function yourself to
    // determine if the class contains a valid instance
   if (ClassIsValid(lFlags, pObject))
   {
       return WBEM_S_NO_ERROR;
   }

   return WBEM_E_PROVIDER_NOT_CAPABLE;   
}

Требования

Требование Значение
Минимальная версия клиента Windows Vista
Минимальная версия сервера Windows Server 2008
Целевая платформа Windows
Header wbemcli.h (включая Wbemidl.h)
Библиотека Wbemuuid.lib
DLL Fastprox.dll; Esscli.dll; FrameDyn.dll; FrameDynOS.dll; Ntevt.dll; Stdprov.dll; Viewprov.dll; Wbemcomn.dll; Wbemcore.dll; Wbemess.dll; Wbemsvc.dll; Wmipicmp.dll; Wmidcprv.dll; Wmipjobj.dll; Wmiprvsd.dll

См. также раздел

Вызов метода

Создание класса

IWbemServices

IWbemServices::P utClass