Метод 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
Одно или несколько из следующих значений являются допустимыми.
Если этот флаг установлен, WMI не сохраняет квалификаторы с измененным вкусом . Если этот флаг не задан, предполагается, что этот объект не локализован и все квалификаторы хранятся вместе с этим экземпляром.
Этот флаг вызывает создание этого класса, если он не существует, или перезаписывается, если он уже существует.
Обновления существующий класс.
Этот флаг предназначен только для создания класса. Вызов завершается ошибкой, если класс уже существует.
Этот флаг регистрирует в службе управления Windows запрос на получение промежуточных отчетов о состоянии с помощью клиентской реализации IWbemObjectSink::SetStatus. Реализация поставщика должна поддерживать промежуточные отчеты о состоянии для этого флага, чтобы изменить поведение.
Поставщики push-уведомлений должны указывать этот флаг при вызове PutClassAsync , чтобы указать, что этот класс изменился.
Этот флаг позволяет обновлять класс, если нет производных классов и нет экземпляров для этого класса. Кроме того, он позволяет выполнять обновления во всех случаях, если изменение относится только к неважным квалификаторам (например, квалификатор описания ). Это поведение по умолчанию для этого вызова и используется для совместимости с предыдущими версиями управления Windows. Если класс имеет экземпляры или изменения относятся к важным квалификаторам, обновление завершается сбоем.
Этот флаг позволяет обновлять классы, даже если есть дочерние классы, если изменение не вызывает никаких конфликтов с дочерними классами. Примером обновления этого флага будет добавление нового свойства в базовый класс, который ранее не упоминался ни в одном из дочерних классов. Если у класса есть экземпляры, обновление завершается ошибкой.
Этот флаг принудительно обновляет классы при наличии конфликтующих дочерних классов. Примером принудительного обновления этого флага будет, если квалификатор класса был определен в дочернем классе, а базовый класс пытался добавить тот же квалификатор, который конфликтует с существующим. В принудительном режиме этот конфликт будет устранен путем удаления конфликтующего квалификатора в дочернем классе.
[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 приводит к тому, что другие поставщики не имеют возможности создать класс, он должен возвращаться только в том случае, если поставщик класса завершился сбоем таким образом, что может быть выполнено успешно.
Если для одного конкретного класса установлено несколько поставщиков классов, 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 |