次の方法で共有


FLT_CALLBACK_DATA 構造体 (fltkernel.h)

FLT_CALLBACK_DATA構造体は、I/O 操作を表します。 フィルター マネージャーとミニフィルターでは、この構造を使用して I/O 操作を開始および処理します。

構文

typedef struct _FLT_CALLBACK_DATA {
  FLT_CALLBACK_DATA_FLAGS     Flags;
  PETHREAD                    Thread;
  PFLT_IO_PARAMETER_BLOCK     Iopb;
  IO_STATUS_BLOCK             IoStatus;
  struct _FLT_TAG_DATA_BUFFER *TagData;
  union {
    struct {
      LIST_ENTRY QueueLinks;
      PVOID      QueueContext[2];
    };
    PVOID FilterContext[4];
  };
  KPROCESSOR_MODE             RequestorMode;
} FLT_CALLBACK_DATA, *PFLT_CALLBACK_DATA;

メンバー

Flags

I/O 操作を記述するフラグのビットマスク。

ミニフィルターでは、次のフラグを設定できます。

フラグ 説明
FLTFL_CALLBACK_DATA_DIRTY ミニフィルターは、このフラグを ( FltSetCallbackDataDirty を呼び出して) コールバック データ構造の内容を変更したことを示すように設定します。 (詳細については、次の「解説」セクションを参照してください)。

注意

フィルター マネージャーのみが次のフラグを設定できます。

フィルター マネージャーは、コールバック データ構造を初期化するときに、コールバック データ構造が表す I/O 操作の種類を指定する次のいずれかのフラグを設定します。

フラグ 説明
FLTFL_CALLBACK_DATA_FAST_IO_OPERATION コールバック データ構造は、高速 I/O 操作を表します。
FLTFL_CALLBACK_DATA_FS_FILTER_OPERATION コールバック データ構造は、ファイル システムのミニフィルター コールバック操作を表します。
FLTFL_CALLBACK_DATA_IRP_OPERATION コールバック データ構造は、I/O 要求パケット (IRP) ベースの操作を表します。

注意

フィルター マネージャーのみが次のフラグを設定できます。

フィルター マネージャーは、コールバック データ構造を初期化するときに、次のフラグを設定することもできます。

フラグ 説明
FLTFL_CALLBACK_DATA_GENERATED_IO コールバック データ構造は、ミニフィルターによって生成された I/O 操作を表します。 このフラグは、IRP ベースの操作に対してのみ有効です。
FLTFL_CALLBACK_DATA_REISSUED_IO コールバック データ構造は、ミニフィルターによって再発行される I/O 操作を表します。 (I/O 操作を再発行するために、ミニフィルターは FltReissueSynchronousIo を呼び出します。このフラグは、IRP ベースの操作に対してのみ有効です。
FLTFL_CALLBACK_DATA_SYSTEM_BUFFER I/O 操作のバッファーは、非ページ プールから割り当てられました。 このフラグは、任意の種類の I/O 操作に対して設定できます。 ミニフィルターでは、このフラグを設定しないでください。

注意

フィルター マネージャーのみが次のフラグを設定できます。

フィルター マネージャーは、コールバック データ構造が表す I/O 操作の完了処理を実行すると、次のフラグのいずれかまたは両方を設定します。

フラグ 説明
FLTFL_CALLBACK_DATA_DRAINING_IO フィルター マネージャーは、I/O 操作の完了ノードを現在ドレインしていることを示すために、このフラグを設定します。 このフラグは、I/O の完了時にのみ有効です。
FLTFL_CALLBACK_DATA_POST_OPERATION Filter Manager は、このフラグを設定して、現在、操作の登録済み事後コールバック (PFLT_POST_OPERATION_CALLBACK) ルーチンを呼び出していることを示します。 このフラグは、I/O の完了時にのみ有効です。

Thread

I/O 操作を開始したスレッドへのポインター。 このフィールドは NULL である可能性があります。

Iopb

I/O 操作のパラメーターを含む FLT_IO_PARAMETER_BLOCK 構造体へのポインター。

IoStatus

I/O 操作の状態と情報を含む IO_STATUS_BLOCK 構造体。 ミニフィルターは、この構造体の内容を変更できるのは、FLT_PREOP_COMPLETEを返す前操作コールバック (PFLT_PRE_OPERATION_CALLBACK) ルーチン、またはFLT_POSTOP_FINISHED_PROCESSINGを返す操作後のコールバック (PFLT_POST_OPERATION_CALLBACK) ルーチン内だけです。 それ以外の場合、この構造体の内容は通常、フィルター マネージャーによって設定されます。

TagData

I/O 操作の再解析ポイント データを含む FLT_TAG_DATA_BUFFER 構造体へのポインター。 このポインターは、作成後のパスでのみ有効です。 したがって、ミニフィルターの操作後コールバック ルーチンのみがこのメンバーの値を変更できます。 ミニフィルターの作成後のコールバック ルーチンは、このメンバーを別の FLT_TAG_DATA_BUFFER 構造体を指すよう変更できます。 ただし、メンバーが別の構造体を指すように変更する場合は、まず ExFreePool を呼び出して既存の構造体を解放し、プール のメモリ リークを防ぐ必要があります。

QueueLinks

フィルター マネージャーのコールバック データ キューを使用して I/O 操作を処理するときにミニフィルターが使用できるキュー リンク。

QueueContext[2]

フィルター マネージャーのキューを使用して I/O 操作を処理するときにミニフィルターが使用できるコンテキスト情報ポインターの配列。

FilterContext[4]

フィルター マネージャーのキュー以外のキューを使用して I/O 操作を実行するときにミニフィルターが使用できるコンテキスト情報ポインターの配列。

RequestorMode

I/O 操作を開始したプロセスの実行モード ( KernelMode または UserMode ) を示します

注釈

ミニフィルターは、1 つ以上の種類の I/O 操作に対して、操作前 (PFLT_PRE_OPERATION_CALLBACK) および操作後 (PFLT_POST_OPERATION_CALLBACK) コールバック ルーチンを登録します。 フィルター マネージャーは、これらのコールバック ルーチンのいずれかを呼び出すと、最初のパラメーターとしてコールバック データ (FLT_CALLBACK_DATA) 構造体を渡します。 この構造体は、I/O 操作を表します。

ミニフィルターの操作前または操作後のコールバック ルーチンは、 Thread メンバーと RequestorMode メンバーを除き、コールバック データ構造の内容を変更できます。 その場合は、IoStatus メンバーの内容も変更していない限り、FltSetCallbackDataDirty を呼び出す必要があります。 それ以外の場合、変更された値は無視されます。

ミニフィルターは、 FltReadFile などのサポート ルーチンを呼び出すか、 FltAllocateCallbackData を呼び出してコールバック データ構造を割り当てることによって、I/O 操作を開始できます。構造体の I/O パラメーターを初期化し、構造体を FltPerformSynchronousIo または FltPerformAsynchronousIo に渡す。

ミニフィルターによって開始された I/O 操作は、呼び出し元インスタンスの下にアタッチされているミニフィルター インスタンスとファイル システムにのみ送信されます。 指定したインスタンスの上にアタッチされたミニフィルターは、I/O 操作を受け取りません。

ミニフィルターは、IRP ベースの I/O 操作のみを開始できます。 高速 I/O またはファイル システム フィルター (FSFilter) コールバック操作を開始できません。

要件

要件
Header fltkernel.h (Fltkernel.h を含む)

こちらもご覧ください

FLT_IO_PARAMETER_BLOCK

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_IS_REISSUED_IO

FLT_IS_SYSTEM_BUFFER

FLT_REGISTRATION

FLT_RELATED_OBJECTS

FLT_TAG_DATA_BUFFER

FltAllocateCallbackData

FltFreeCallbackData

FltPerformAsynchronousIo

FltPerformSynchronousIo

FltReadFile

FltReissueSynchronousIo

FltReuseCallbackData

FltSetCallbackDataDirty

IO_STACK_LOCATION

IO_STATUS_BLOCK

Irp

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK