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


Метод IWbemObjectSink::SetStatus (wbemcli.h)

Метод IWbemObjectSink::SetStatus вызывается источниками, чтобы указать конец последовательности уведомлений или отправить другие коды состояния в приемник. Метод IWbemObjectSink::Indicate может быть вызван до вызова SetStatus.

Как правило, клиент реализует интерфейс IWbemObjectSink и выполняет методы IWbemServices , которые возвращают свои результаты с помощью интерфейса IWbemObjectSink . Во время этой операции WMI вызывает указать столько раз, сколько требуется, а затем последний вызов SetStatus и, во многих случаях, Release.

Синтаксис

HRESULT SetStatus(
  [in] long             lFlags,
  [in] HRESULT          hResult,
  [in] BSTR             strParam,
  [in] IWbemClassObject *pObjParam
);

Параметры

[in] lFlags

Битовая маска сведений о состоянии. Состояние операции можно получить, проверив параметр hResult .

WBEM_STATUS_COMPLETE

Операция завершена.

WBEM_STATUS_PROGRESS

Операция не завершена.

WBEM_STATUS_REQUIREMENTS

Используется при активации после фильтрации.

[in] hResult

Для этого параметра задано значение HRESULT асинхронной операции или уведомления. Это либо код ошибки, если произошла ошибка, либо объем хода выполнения, достигнутый при асинхронном вызове.

[in] strParam

Получает указатель на BSTR, доступный только для чтения, если исходная асинхронная операция возвращает строку. Например, при использовании PutInstanceAsync вызывается SetStatus с этим параметром, равным пути к объекту только что созданного экземпляра.

[in] pObjParam

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

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

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

Комментарии

При реализации приемника подписки на события (IWbemObjectSink или IWbemEventSink) не вызывайте WMI из метода SetStatus в объекте приемника. Например, вызов IWbemServices::CancelAsyncCall из реализации SetStatus может помешать состоянию WMI. Чтобы отменить подписку на события, установите флаг и вызовите IWbemServices::CancelAsyncCall из другого потока или объекта. Для реализаций, не связанных с приемником событий, таких как объект, перечисление и извлечение запросов, можно вызвать обратно в WMI.

Реализации приемника должны обрабатывать уведомление о событии в пределах 100 MSEC, так как поток WMI, доставляющий уведомление о событии, не может выполнять другие действия, пока объект приемника не завершит обработку. Если уведомление требует большого объема обработки, приемник может использовать внутреннюю очередь для обработки другим потоком. Для реализаций, не связанных с приемником событий, таких как объект, перечисление и извлечение запросов, можно вызвать обратно в WMI.

Чтобы получать промежуточные обновления состояния через клиентскую реализацию SetStatus, необходимо указать WBEM_FLAG_SENT_STATUS в вызове метода поставщика или службы. Точное состояние можно определить, изучив значения HIWORD и LOWORD для hResult отдельно. Значение LOWORD (hResult) содержит объем хода выполнения, достигнутый на данный момент, а значение HIWORD (hResult) — итог.

Если не указать WBEM_FLAG_SEND_STATUS при вызове поставщика или метода службы, вы гарантированно получите один и только один вызов SetStatus.

Требования

Требование Значение
Минимальная версия клиента Windows Vista
Минимальная версия сервера Windows Server 2008
Целевая платформа Windows
Header wbemcli.h (включая Wbemidl.h)
Библиотека Wbemuuid.lib
DLL Fastprox.dll

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

IWbemObjectSink

IWbemObjectSink::Indicate

IWbemObjectSinkEx

IWbemServices::ExecQueryAsync

WBEM_STATUS_TYPE