IWbemObjectSink::SetStatus 方法 (wbemcli.h)

源调用 IWbemObjectSink::SetStatus 方法以指示通知序列的结束,或将其他状态代码发送到接收器。 在调用 SetStatus 之前,可能已调用 IWbemObjectSink::Indicate 方法,也可能尚未调用。

通常,客户端实现 IWbemObjectSink 接口,并执行 使用 IWbemObjectSink 接口返回其结果的 IWbemServices 方法。 在此操作期间,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 中包含的值。

注解

(IWbemObjectSinkIWbemEventSink) 实现事件订阅接收器时,请勿从接收器对象的 SetStatus 方法中调用 WMI。 例如,从 SetStatus 的实现中调用 IWbemServices::CancelAsyncCall 可能会干扰 WMI 状态。 若要取消事件订阅,请设置一个标志,并从另一线程或对象调用 IWbemServices::CancelAsyncCall。 对于对象、枚举和查询检索等与事件接收器无关的实现,可以回调到 WMI。

接收器实现应在 100 MSEC 内处理事件通知,因为在接收器对象完成处理之前,传递事件通知的 WMI 线程无法执行其他工作。 如果通知需要大量处理,接收器可使用另一个线程的内部队列来进行处理。 对于对象、枚举和查询检索等与事件接收器无关的实现,可以回调到 WMI。

若要通过客户端的 SetStatus 实现接收中间状态更新,必须在调用提供程序/服务方法时指定 WBEM_FLAG_SENT_STATUS 。 可以通过单独检查 hResult 的 HIWORD 和 LOWORD 值来确定确切状态。 LOWORD (hResult) 值包含到目前为止已完成的进度量,HIWORD (hResult) 值包含总计。

如果在调用提供程序或服务方法时未指定 WBEM_FLAG_SEND_STATUS ,则保证只接收一次对 SetStatus 的调用。

要求

要求
最低受支持的客户端 Windows Vista
最低受支持的服务器 Windows Server 2008
目标平台 Windows
标头 wbemcli.h (包括 Wbemidl.h)
Library Wbemuuid.lib
DLL Fastprox.dll

另请参阅

IWbemObjectSink

IWbemObjectSink::指示

IWbemObjectSinkEx

IWbemServices::ExecQueryAsync

WBEM_STATUS_TYPE