Метод IWbemServices::CancelAsyncCall (wbemcli.h)

Метод IWbemServices::CancelAsyncCall отменяет все ожидающие в настоящее время асинхронные вызовы на основе указателя IWbemObjectSink , который изначально был передан в асинхронный метод. Незавершенный указатель IWbemObjectSink можно освободить до вызова или после возврата вызова. Метод CancelAsyncCall не работает из приемника и не поддерживается поставщиками методов. Это означает, что отменен только клиентский конец вызова. Поставщик реализации не получает уведомления о том, что вызов был отменен и выполняется до завершения. Это следует учитывать перед отменой методов, которые занимают много времени, таких как методы Defrag и Format в классе Win32_Volume .

Синтаксис

HRESULT CancelAsyncCall(
  [in] IWbemObjectSink *pSink
);

Параметры

[in] pSink

Указатель на реализацию IWbemObjectSink , предоставляемую клиентом для любого из асинхронных методов IWbemServices.

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

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

При сбое можно получить доступные сведения из функции COM GetErrorInfo.

Коды ошибок COM также могут быть возвращены, если проблемы с сетью приводят к потере удаленного подключения к управлению Windows.

Примечание Если Метод SetStatus не был вызван в приемнике приложения к моменту обработки WMI CancelAsyncCall, WMI вызывает SetStatus в этом приемнике с WBEM_E_CALL_CANCELLED в качестве значения параметра hResult .
 
Время и характер асинхронной операции могут повлиять на возможность отмены операции инструментарием WMI. Только длительные запросы, скорее всего, будут успешно отменены до их завершения. Более быстрые операции, такие как асинхронное удаление или изменение, обычно выполняются до того, как WMI сможет обработать вызов CancelAsyncCall . Поэтому, хотя CancelAsyncCall пытается отменить текущую операцию, иногда все, что можно сделать, — освободить указатель IWbemObjectSink .
Примечание Можно выполнять многочисленные асинхронные вызовы с помощью одного и того же приемника объектов. В этом случае метод CancelAsyncCall отменяет все асинхронные вызовы, совместно использующие этот приемник объектов. Настоятельно рекомендуется создать один экземпляр приемника объектов для каждого выдающегося асинхронного вызова.
 

Комментарии

Так как обратный вызов к приемнику может не возвращаться на том же уровне проверки подлинности, который требуется клиенту, рекомендуется использовать полусинхронный режим вместо асинхронного взаимодействия. Дополнительные сведения см. в разделе Вызов метода. Вызов CancelAsyncCall из реализации IWbemObjectSink::Indicate или IWbemObjectSink::SetStatus может повлиять на состояние WMI и не рекомендуется.

В случае вызова метода, такого как ExecMethodAsync, отменяется только конец клиентского вызова. Поставщик реализации не получает уведомления о том, что вызов был отменен и выполняется до завершения.

Дополнительные сведения об использовании асинхронных вызовов см. в разделах Выполнение асинхронного вызова с помощью C++ и Получение уведомлений об асинхронных событиях.

Примеры

Полный пример использования CancelAsyncCall см. в разделе Пример получения уведомлений о событиях через WMI.

Следующий пример C++, взятый из примера \\Program Files\Microsoft SDKs\Windows\v7.0\Samples\sysmgmt\wmi\vc\decoupled\instance_provider, демонстрирует реализацию CancelAsyncCall.
HRESULT CProvider_IWbemServices :: CancelAsyncCall ( 
  
 IWbemObjectSink *a_Sink
)
{
 HRESULT t_Result = WBEM_E_NOT_AVAILABLE ;
 return t_Result ;
}

Требования

Требование Значение
Минимальная версия клиента Windows Vista
Минимальная версия сервера Windows Server 2008
Целевая платформа Windows
Header wbemcli.h (включая Wbemidl.h)
Библиотека Wbemuuid.lib
DLL Fastprox.dll; Esscli.dll; FrameDyn.dll; FrameDynOS.dll; Ntevt.dll; Stdprov.dll; Viewprov.dll; Wbemcomn.dll; Wbemcore.dll; Wbemess.dll; Wbemsvc.dll; Wmipicmp.dll; Wmidcprv.dll; Wmipjobj.dll; Wmiprvsd.dll

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

IWbemObjectSink

IWbemServices