次の方法で共有


FltSetCancelCompletion 関数 (fltkernel.h)

ミニフィルター ドライバーは 、FltSetCancelCompletion を呼び出して、特定の I/O 操作が取り消された場合に呼び出されるキャンセル ルーチンを指定します。

構文

NTSTATUS FLTAPI FltSetCancelCompletion(
  [in] PFLT_CALLBACK_DATA              CallbackData,
  [in] PFLT_COMPLETE_CANCELED_CALLBACK CanceledCallback
);

パラメーター

[in] CallbackData

I/O 操作のコールバック データ (FLT_CALLBACK_DATA) 構造体へのポインター。 操作は IRP ベースの I/O 操作である必要があり、ページング I/O 操作である必要があります。 指定されたコールバック データ構造が IRP ベースの I/O 操作を表すかどうかを確認するには、 FLT_IS_IRP_OPERATION マクロを使用します。 このパラメーターは必須であり、 NULL にすることはできません。

[in] CanceledCallback

呼び出し元から提供されたキャンセル ルーチンへのポインター。 CallbackData で表される I/O 操作が取り消された場合、フィルター マネージャーはこのルーチンを呼び出します。

このルーチンは、次のように宣言されています。

typedef VOID
(*PFLT_COMPLETE_CANCELED_CALLBACK) (
      IN PFLT_CALLBACK_DATA CallbackData
      );

CallbackData

I/O 操作のFLT_CALLBACK_DATA構造体へのポインター。

戻り値

FltSetCancelCompletion は、STATUS_SUCCESSまたは適切な NTSTATUS 値を返します。

注釈

FltSetCancelCompletion は、作業キューにポストされる IRP ベースの I/O 操作のキャンセル ルーチンを指定します。

ミニフィルター ドライバーは通常、作業キューに操作をポストする FltQueueDeferredIoWorkItem を呼び出す直前に、I/O 操作の FltSetCancelCompletion を呼び出します。

FltCbdqXxx ルーチンを使用して、キャンセル セーフなコールバック データ キューにポストされる I/O 操作に対して FltSetCancelCompletion を呼び出さないでください。

フィルター マネージャーは、システムのキャンセル スピン ロックを保持したり、他の同期を実行したりせずに CanceledCallback ルーチンを呼び出します。 必要な同期は、ミニフィルター ドライバー自体によって指定する必要があります。

I/O 操作を取り消すには、 FltCancelIo を呼び出します。

要件

要件
対象プラットフォーム ユニバーサル
Header fltkernel.h (Fltkernel.h を含む)
Library FltMgr.lib
[DLL] Fltmgr.sys
IRQL <= DISPATCH_LEVEL

こちらもご覧ください

FLT_CALLBACK_DATA

FLT_IS_IRP_OPERATION

FltCancelIo

FltClearCancelCompletion

FltQueueDeferredIoWorkItem