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) ベースの操作を表します。 |
手記
フィルター マネージャーのみが次のフラグを設定できます。
フィルター マネージャーは、コールバック データ構造を初期化するときに、次のフラグを設定することもできます。
手記
フィルター マネージャーのみが次のフラグを設定できます。
フィルター マネージャーは、コールバック データ構造が表す I/O 操作の完了処理を実行すると、次のフラグのいずれかまたは両方を設定します。
旗 | 意味 |
---|---|
FLTFL_CALLBACK_DATA_DRAINING_IO | フィルター マネージャーは、このフラグを設定して、I/O 操作の完了ノードを現在ドレインしていることを示します。 このフラグは、I/O の完了時にのみ有効です。 |
FLTFL_CALLBACK_DATA_POST_OPERATION | フィルター マネージャーは、現在、操作の登録済みの操作後コールバック (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
KernelMode または UserMode を、I/O 操作を開始したプロセスの実行モードを示します。
備考
ミニフィルターは、1 つ以上の種類の I/O 操作の事前操作 (PFLT_PRE_OPERATION_CALLBACK) および操作後 (PFLT_POST_OPERATION_CALLBACK) コールバック ルーチンを登録します。 フィルター マネージャーは、これらのコールバック ルーチンのいずれかを呼び出すと、最初のパラメーターとしてコールバック データ (FLT_CALLBACK_DATA) 構造体を渡します。 この構造体は、I/O 操作を表します。
ミニフィルターの操作前または操作後のコールバック ルーチンは、スレッド と RequestorMode メンバーを除き、コールバック データ構造 内容を変更できます。 その場合は、IoStatus メンバーの内容も変更していない限り、FltSetCallbackDataDirty呼び出す必要があります。 それ以外の場合、変更された値は無視されます。
ミニフィルターは、FltReadFileなどのサポート ルーチンを呼び出すか、fltAllocateCallbackData呼び出してコールバック データ構造を割り当てることによって、I/O 操作を開始できます。構造体の I/O パラメーターを初期化し、その構造体を FltPerformSynchronousIoまたは fltPerformAsynchronousIo渡します。
ミニフィルターによって開始される I/O 操作は、呼び出し元のインスタンスの下にアタッチされているミニフィルター インスタンスとファイル システムにのみ送信されます。 指定したインスタンスの上にアタッチされたミニフィルターは、I/O 操作を受け取りません。
ミニフィルターは、IRP ベースの I/O 操作のみを開始できます。 高速 I/O またはファイル システム フィルター (FSFilter) コールバック操作を開始できません。
必要条件
要件 | 価値 |
---|---|
ヘッダー | fltkernel.h (Fltkernel.h を含む) |
関連項目
FltAllocateCallbackDataの
FltFreeCallbackDataをする
FltPerformAsynchronousIoの
FltPerformSynchronousIoをする
FltReadFileの
FltReissueSynchronousIoをする
FltReuseCallbackDataの
FltSetCallbackDataDirtyの