次の方法で共有


EvtCancel 関数 (winevt.h)

ハンドルに対するすべての保留中の操作を取り消します。

構文

BOOL EvtCancel(
  EVT_HANDLE Object
);

パラメーター

Object

操作を取り消すハンドル。 次の操作を取り消すことができます。

EvtClearLogEvtExportLogEvtQueryEvtSubscribe の各操作を取り消すには、セッション ハンドルを渡す必要があります。 既定のセッション (ローカル セッション) を指定するには、このパラメーターを NULL に設定 します

戻り値

リターン コード/値 説明
TRUE
関数が正常に実行されました。
FALSE
関数が失敗しました。 エラー コードを取得するには、 GetLastError 関数を呼び出します。

注釈

実行時間の長い操作を取り消すには、この関数を使用します。 たとえば、 EvtNext 関数を呼び出すと、何千ものイベント レコードがフィルター処理されるため、理論的には時間がかかる場合があります。 EvtCancel を呼び出すと、EvtNext 関数がそれ以上のイベント レコードを処理できなくなります。 関数が操作をすぐに停止できない場合があることに注意してください。

完了したら、 EvtClose 関数を呼び出してハンドルを閉じる必要があります。

次の手順では、実行時間の長い操作を取り消す方法について説明します。

実行時間の長い操作を取り消すには

  1. スレッド A は、実行時間の長い操作 ( EvtSeek 関数など) を呼び出します。
  2. スレッド B は、すべての操作を取り消して閉じる必要があるため、スレッド B は EvtCancel 関数を呼び出します。
  3. スレッド B は、保留中のすべての呼び出しが完了するまで待機します (スレッド A と同期します)。 EvtCancel 関数が呼び出されたため、スレッド A は EvtCancel の呼び出しが行われた直後に完了する必要があります。
  4. スレッド A が操作を完全に完了した後 (EvtSeek)、スレッド B は EvtClose 関数を使用してクエリ結果ハンドルを閉じることができます。
停止中の操作は、エラー コード ERROR_CANCELLEDで返されます。

要件

要件
サポートされている最小のクライアント Windows Vista [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2008 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー winevt.h
Library Wevtapi.lib
[DLL] Wevtapi.dll