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 を含む) |