描述
IWbemServices.CancelAsyncCall方法将基于最初传递给异步方法的IWbemObjectSink指针取消任何当前挂起的异步调用。未完成的IWbemObjectSink指针可以在通话或呼叫返回之后释放。方法提供者不支持CancelAsyncCall方法在一个接收器内部无法运行。这意味着只有客户端的呼叫被取消。执行提供商不会通知呼叫已被取消并运行完毕。在取消需要很长时间的方法之前,您应该考虑这一点,例如Win32_Volume类中的磁盘碎片整理和格式方法。
C++ 语法
HRESULT CancelAsyncCall( [in] IWbemObjectSink *pSink ); |
PowerBASIC 语法
METHOD CancelAsyncCall ( _ BYVAL pSink AS IWbemObjectSink _ ) AS LONG |
参数
pSink
指向客户端提供给IWbemServices的任何异步方法的IWbemObjectSink实现。
返回值
此方法返回一个HRESULT,表示方法调用的状态。下表列出了HRESULT中包含的值。
失败时,您可以从COM函数GetErrorInfo获取可用的信息。
如果网络问题导致您失去与Windows Management的远程连接,也可以返回COM特定的错误代码。
注意如果在WMI进程CancelAsyncCall时尚未在应用程序的接收器上调用SetStatus,则WMI将使用WBEM_E_CALL_CANCELLED作为HRESULT参数的值调用该接收器上的SetStatus.
时序和异步操作的性质可以影响WMI是否能够取消操作。只有冗长的查询可能在完成之前成功取消。更快的操作,如异步删除或修改,通常在WMI处理CancelAsyncCall调用之前完成。所以当CancelAsyncCall尝试取消当前操作时,有时可以完成的所有操作是释放IWbemObjectSink指针。
注意可以使用相同的对象接收器进行大量异步调用。在这种情况下,CancelAsyncCall方法将取消共享此对象接收器的所有异步调用。强烈建议您为每个未完成的异步调用创建一个对象宿的一个实例。
退货代码 |
描述 |
WBEM_E_FAILED |
未指定错误 |
WBEM_E_INVALID_PARAMETER |
pSink中提供的接口不对应于待处理的异步请求。 |
WBEM_E_OUT_OF_MEMORY |
没有足够的内存来完成操作。 |
WBEM_E_SHUTTING_DOWN |
Windows管理服务已停止并重新启动。需要新的电话ConnectServer. |
WBEM_E_TRANSPORT_FAILURE |
当前进程和Windows管理之间的远程过程调用(RPC)链接失败。 |
WBEM_S_NO_ERROR |
呼叫成功。 |
备注
因为在客户端需要的相同身份验证级别下,可能不会返回到宿的回调,建议您使用半异步而不是异步通信。有关详细信息,请参阅调用方法.从IWbemObjectSink.Indicate或IWbemObjectSink.SetStatus的实施中调用CancelAsyncCall可能会干扰WMI状态,不建议。
在方法调用(例如ExecMethodAsync)的情况下,只有客户端的呼叫被取消。执行提供商不会通知呼叫已被取消并运行完毕。
要求
客户 |
需要Windows Vista,Windows XP,Windows 2000 Professional,Windows NT Workstation 4.0 SP4及更高版本,Windows Me,Windows 98或Windows 95。 |
服务器 |
需要Windows Server 2008,Windows Server 2003,Windows 2000 Server或Windows NT Server 4.0 SP4及更高版本。 |
头 |
在Wbemcli.inc中声明。 |
DLL |
需要Fastprox.dll。 需要Esscli.dll。 需要Framedyn.dll。 需要Ntevt.dll。 需要Stdprov.dll。 需要Viewprov.dll。 需要Wbemcomn.dll。 需要Wbemcore.dll。 需要Wbemess.dll。 需要Wbemsvc.dll。 需要Wmipicmp.dll。 需要Wmidcprv.dll。 需要Wmipjobj.dll。 需要Wmiprvsd.dll。 |