次の方法で共有


IWbemServices::CancelAsyncCall メソッド (wbemcli.h)

IWbemServices::CancelAsyncCall メソッドは、最初に非同期メソッドに渡された IWbemObjectSink ポインターに基づいて、現在保留中の非同期呼び出しをすべて取り消します。 未処理の IWbemObjectSink ポインターは、呼び出しの前または呼び出しが返された後に解放できます。 CancelAsyncCall メソッドはシンク内から操作可能ではなく、メソッド プロバイダーではサポートされていません。 これは、呼び出しのクライアント終了のみが取り消されたことを意味します。 実装プロバイダーには、呼び出しが取り消され、完了まで実行されたことが通知されません。 これは、Win32_Volume クラスの Defrag メソッドや Format メソッドなど、完了までに長い時間がかかるメソッドを取り消す前に考慮する必要があります。

構文

HRESULT CancelAsyncCall(
  [in] IWbemObjectSink *pSink
);

パラメーター

[in] pSink

クライアントが IWbemServices の非同期メソッドのいずれかに提供する IWbemObjectSink 実装へのポインター。

戻り値

このメソッドは、メソッド呼び出しの状態を示す HRESULT を返します。 次の一覧は、 HRESULT 内に含まれる値の一覧です。

失敗した場合は、COM 関数 GetErrorInfo から使用可能な情報を取得できます。

ネットワークの問題によって Windows Management へのリモート接続が失われる場合は、COM 固有のエラー コードも返される可能性があります。

メモWMI が CancelAsyncCall を処理する時点で、アプリケーションのシンクで SetStatus が呼び出されていない場合、WMI は hResult パラメーターの値として WBEM_E_CALL_CANCELLED を使用して、そのシンクで SetStatus を呼び出します。
 
タイミングと非同期操作の性質は、WMI が操作を取り消すことができるかどうかに影響を与える可能性があります。 長いクエリのみが、完了する前に正常に取り消される可能性があります。 通常、WMI が CancelAsyncCall 呼び出しを処理する前に、非同期の削除や変更などのより高速な操作が完了します。 したがって 、CancelAsyncCall が現在の操作を取り消そうとしている間に、 IWbemObjectSink ポインターを解放することなどができることがあります。
メモ 同じオブジェクト シンクを使用して、多数の非同期呼び出しを行うことができます。 この場合、 CancelAsyncCall メソッドは、このオブジェクト シンクを共有するすべての非同期呼び出しを取り消します。 未処理の非同期呼び出しごとに、オブジェクト シンクのインスタンスを 1 つ作成することを強くお勧めします。
 

注釈

シンクへのコールバックはクライアントが必要とするのと同じ認証レベルでは返されない可能性があるため、非同期ではなく半同期通信を使用することをお勧めします。 詳細については、「メソッドの呼び出し」を参照してください。 IWbemObjectSink::Indicate または IWbemObjectSink::SetStatus の実装内から CancelAsyncCall を呼び出すと、WMI 状態に干渉する可能性があり、推奨されません。

ExecMethodAsync などのメソッド呼び出しの場合、呼び出しのクライアント終了のみが取り消されます。 実装プロバイダーには、呼び出しが取り消され、完了まで実行されたことが通知されません。

非同期呼び出しの使用方法の詳細については、「C++ での非同期呼び出しの実行」および「非同期イベント通知の受信」を参照してください。

CancelAsyncCall を使用する完全な例については、「例: WMI 経由でイベント通知を受信する」を参照してください。

\\Program Files\Microsoft SDK\Windows\v7.0\Samples\sysmgmt\wmi\vc\decoupled\instance_provider サンプルから取得した次の C++ サンプルは、 CancelAsyncCall の実装を示しています。
HRESULT CProvider_IWbemServices :: CancelAsyncCall ( 
  
 IWbemObjectSink *a_Sink
)
{
 HRESULT t_Result = WBEM_E_NOT_AVAILABLE ;
 return t_Result ;
}

要件

要件
サポートされている最小のクライアント Windows Vista
サポートされている最小のサーバー Windows Server 2008
対象プラットフォーム Windows
ヘッダー wbemcli.h (Wbemidl.h を含む)
Library 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