勇芳软件工作室.汉化:  Windows Management Instrumentation > COM API for WMI > Interfaces > IWbemServices >

CancelAsyncCall Method

Previous pageReturn to chapter overviewNext page

描述

 

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.IndicateIWbemObjectSink.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。