FLT_IO_PARAMETER_BLOCK 構造体 (fltkernel.h)

FLT_IO_PARAMETER_BLOCK構造体には、FLT_CALLBACK_DATAコールバック データ構造によって表される I/O 操作のパラメーターが含まれています。

構文

typedef struct _FLT_IO_PARAMETER_BLOCK {
  ULONG          IrpFlags;
  UCHAR          MajorFunction;
  UCHAR          MinorFunction;
  UCHAR          OperationFlags;
  UCHAR          Reserved;
  PFILE_OBJECT   TargetFileObject;
  PFLT_INSTANCE  TargetInstance;
  FLT_PARAMETERS Parameters;
} FLT_IO_PARAMETER_BLOCK, *PFLT_IO_PARAMETER_BLOCK;

メンバー

IrpFlags

I/O 操作のさまざまな側面を指定するフラグのビットマスク。 これらのフラグは、IRP ベースの操作にのみ使用されます。 次の表は、フラグ値を示しています。

意味
IRP_BUFFERED_IO 操作は、バッファー内の I/O 操作です。
IRP_CLOSE_OPERATION 操作はクリーンアップ操作またはクローズ操作です。
IRP_DEALLOCATE_BUFFER I/O マネージャーは、IRP の完了フェーズ中にバッファーを解放します。
IRP_INPUT_OPERATION 操作は入力操作です。
IRP_NOCACHE 操作はキャッシュされていない I/O 操作です。
IRP_PAGING_IO 操作はページング I/O 操作です。
IRP_SYNCHRONOUS_API I/O 操作は同期です。
IRP_SYNCHRONOUS_PAGING_IO 操作は同期ページング I/O 操作です。
IRP_MOUNT_COMPLETION 操作のボリューム マウントが完了しました。
IRP_CREATE_OPERATION 操作は、作成操作または開いている操作です。
IRP_READ_OPERATION I/O 操作は読み取り用です。
IRP_WRITE_OPERATION I/O 操作は書き込み用です。
IRP_DEFER_IO_COMPLETION 操作の I/O 完了は遅延されます。
IRP_ASSOCIATED_IRP 操作は、マスター IRP に関連付けられています。
IRP_OB_QUERY_NAME 操作は非同期の名前クエリです。
IRP_HOLD_DEVICE_QUEUE 予約済み。
IRP_UM_DRIVER_INITIATED_IO 操作は、ユーザー モード ドライバーから発生しました。

MajorFunction

I/O 操作の主な関数コード。 主な関数コードは、IRP ベースの操作、高速 I/O 操作、およびファイル システム (FSFilter) コールバック操作に使用されます。 その他の操作の詳細については、「 FLT_PARAMETERS」を参照してください。

MinorFunction

I/O 操作のマイナー関数コード。 このメンバーは省略可能であり、 NULL にすることができますMajorFunction メンバーの値によって、使用可能な値が決まります。 マイナー関数コードの詳細については、「 FLT_PARAMETERS」を参照してください。

OperationFlags

I/O 操作のさまざまな側面を指定するフラグのビットマスク。 これらのフラグは、IRP ベースの操作にのみ使用されます。 フィルター マネージャーは、IRP に関連付けられているIO_STACK_LOCATION構造体の Flags メンバーからこれらのフラグをコピーします。 次の表は、最もよく使用されるフラグ値を示しています。

意味
SL_CASE_SENSITIVE IRP_MJ_CREATEに使用されます。 このフラグが設定されている場合、ファイル名の比較では大文字と小文字を区別する必要があります。
SL_EXCLUSIVE_LOCK IRP_MJ_LOCK_CONTROLに使用されます。 このフラグが設定されている場合は、排他的なバイト範囲ロックが要求されます。 それ以外の場合は、共有ロックが要求されます。
SL_FAIL_IMMEDIATELY IRP_MJ_LOCK_CONTROLに使用されます。 このフラグが設定されている場合、ロック要求はすぐに許可できない場合は失敗します。
SL_FORCE_ACCESS_CHECK IRP_MJ_CREATEに使用されます。 このフラグが設定されている場合は、IRP の RequestorMode メンバーの値が KernelMode であっても、アクセス チェックを実行する必要があります。
SL_FORCE_DIRECT_WRITE IRP_MJ_WRITEとIOCTL_DISK_COPY_DATAに使用されます。 このフラグが設定されている場合、カーネル モード ドライバーは、通常、セキュリティ上の理由から書き込みがブロックされているボリューム領域に書き込むことができます。 このフラグは、ファイル システム レイヤーとストレージ スタック レイヤーの両方でチェックされます。 SL_FORCE_DIRECT_WRITE フラグは、Windows Vista 以降のバージョンの Windows で使用できます。
SL_INDEX_SPECIFIED IRP_MJ_DIRECTORY_CONTROLIRP_MJ_QUERY_EAおよびIRP_MJ_SET_QUOTAに使用されます。 このフラグが設定されている場合、ディレクトリ、クォータ、または拡張属性の情報のスキャンは、インデックスが指定されたリスト内のエントリから開始する必要があります。
SL_OPEN_PAGING_FILE IRP_MJ_CREATEに使用されます。 このフラグが設定されている場合、ファイルはページング ファイルです。
SL_OPEN_TARGET_DIRECTORY IRP_MJ_CREATEに使用されます。 このフラグが設定されている場合は、ファイルの親ディレクトリを開く必要があります。
SL_OVERRIDE_VERIFY_VOLUME IRP_MJ_DIRECTORY_CONTROLIRP_MJ_READおよびIRP_MJ_WRITEに使用されます。 このフラグが設定されている場合は、ボリュームのデバイス オブジェクトに DO_VERIFY_VOLUME フラグが設定されている場合でも、I/O 操作を実行する必要があります。
SL_RESTART_SCAN IRP_MJ_DIRECTORY_CONTROLIRP_MJ_QUERY_EAおよびIRP_MJ_SET_QUOTAに使用されます。 このフラグが設定されている場合、ディレクトリ、クォータ、または拡張属性の情報のスキャンは、ディレクトリまたはリストの最初のエントリから開始する必要があります。 それ以外の場合は、前のスキャンからスキャンを再開する必要があります。
SL_RETURN_SINGLE_ENTRY IRP_MJ_DIRECTORY_CONTROLIRP_MJ_QUERY_EAおよびIRP_MJ_SET_QUOTAに使用されます。 このフラグが設定されている場合、ディレクトリ、クォータ、または拡張属性の情報をスキャンすると、最初に見つかったエントリのみが返されます。
SL_WATCH_TREE IRP_MJ_DIRECTORY_CONTROLに使用されます。 このフラグが設定されている場合は、このディレクトリのすべてのサブディレクトリも監視する必要があります。 それ以外の場合は、ディレクトリ自体のみが監視されます。
SL_WRITE_THROUGH IRP_MJ_WRITEに使用されます。 このフラグが設定されている場合、ファイル データは、キャッシュに書き込まれるだけでなく、永続ストレージに書き込まれる必要があります。

Reserved

システムで使用するために予約されています。 使用しないでください。

TargetFileObject

この I/O 操作のターゲットであるファイルまたはディレクトリのファイル オブジェクト ポインター。

TargetInstance

この I/O 操作のターゲットであるミニフィルターの不透明なインスタンス ポインター。

Parameters

MajorFunction メンバーと MinorFunction メンバーによって指定された I/O 操作のパラメーターを含むFLT_PARAMETERS構造体。

注釈

FLT_IO_PARAMETER_BLOCK構造体には、コールバック データ (FLT_CALLBACK_DATA) 構造体で表される I/O 操作のパラメーターが含まれています。 コールバック データ構造体には、 Iopb メンバー内のFLT_IO_PARAMETER_BLOCK構造体へのポインターが含まれています。

ミニフィルターは、次のコールバック ルーチン型への Data または CallbackData 入力パラメーターとしてコールバック データ構造へのポインターを受け取ります。

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

フィルター マネージャーがミニフィルターに対して事前操作コールバックまたは事後処理コールバックを発行すると、FltObjects-FileObject>TargetFileObject (CallbackData-Iopb-TargetFileObject>>) は最初は同じです。 ミニフィルターで TargetFileObject または TargetInstance が変更された場合、後続の FltSetCallbackDataDirty を事前操作コールバックから呼び出すと、操作を下位フィルターに送信する前に、Filter Manager によって FltObjects-FileObject>と FltObjects-Instance> が置き換えられます。

ミニフィルターの相互運用前コールバック ルーチンが I/O 操作のパラメーターを変更した場合、ミニフィルター インスタンス スタック内のその下にあるすべてのミニフィルターは、その前操作および事後操作コールバック ルーチンで変更されたパラメーターを受け取ります。

変更されたパラメーターは、ミニフィルター独自の postoperation コールバック ルーチン、またはミニフィルター インスタンス スタック内のミニフィルターの上のミニフィルターによって受信されません。 いずれの場合も、ミニフィルターのプリ操作コールバック ルーチンと事後操作コールバック ルーチンは、同じ入力パラメーター値を受け取ります。

ミニフィルターが TargetInstance メンバーの値を変更する場合、新しい値は、異なるボリューム上の同じ高度にある同じミニフィルターのインスタンスへのポインターである必要があります。 さらに、新しいボリュームのデバイス オブジェクトには、元のボリュームのデバイス オブジェクト以上のスタック サイズが必要です。

ボリュームにアタッチされているインスタンスの不透明なインスタンス ポインターを指定して、ボリューム デバイス オブジェクトのスタック サイズを取得するには、次の操作を行います。

  • ボリューム ポインターを取得するには、 FltGetVolumeFromInstance を呼び出します。
  • FltGetDeviceObject を呼び出して、ボリューム デバイス オブジェクトへのポインターを取得します。 このポインターは、 DeviceObject パラメーターで返されます。 デバイス オブジェクトのスタック サイズは、DeviceObject-StackSize> にあります。
  • ボリューム ポインターが不要になったら、 FltObjectDereference を呼び出して参照カウントを減らします。
  • ボリューム デバイス オブジェクト ポインターが不要になったら、 ObDereferenceObject を呼び出して参照数を減らします。

ミニフィルターは、 TargetFileObject メンバーの値を変更できます。 ただし、新しい値は、 TargetInstance メンバーによって指定されたインスタンスと同じボリューム上に存在するファイルのファイル オブジェクトへのポインターである必要があります。

ミニフィルターは、 MajorFunction メンバーの値を安全に変更できません。 代わりに、新しい I/O 操作を開始する必要があります。

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

注意

I/O 操作を開始するときは、可能な限りサポート ルーチンを使用します。 ミニフィルターは、特定の I/O 操作のサポート関数がない場合にのみ、独自のコールバック データを割り当てる必要があります。

要件

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

こちらもご覧ください

FLT_CALLBACK_DATA

FLT_IS_IRP_OPERATION

FltAllocateCallbackData

FltClearCallbackDataDirty

FltDecodeParameters

FltIsCallbackDataDirty

FltReadFile

FltSetCallbackDataDirty

IO_STACK_LOCATION

Irp

FLT_PARAMETERS

IRP_MJ_CLEANUP

IRP_MJ_CLOSE

IRP_MJ_FLUSH_BUFFERS

IRP_MJ_SHUTDOWN

PFLT_COMPLETED_ASYNC_IO_CALLBACK

PFLT_GENERATE_FILE_NAME

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK