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 中包含的值。
注解
(IWbemObjectSink 或 IWbemEventSink) 实现事件订阅接收器时,请勿从接收器对象的 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 |