次の方法で共有


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 構造体の フラグ メンバーからこれらのフラグをコピーします。 次の表は、最もよく使用されるフラグ値を示しています。

価値 意味
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構造体へのポインターが含まれています。

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

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

フィルター マネージャーがミニフィルターに対して事前操作コールバックまたは事後処理コールバックを発行した場合、FltObjects- >FileObjectTargetFileObject (CallbackData->Iopb->TargetFileObject) は、最初は同じです。 ミニフィルターが TargetFileObject 変更するか、TargetInstance した場合、後続の呼び出しでプリオペレーション コールバックから FltSetCallbackDataDirty すると、フィルター マネージャーは、操作を下位フィルターに送信する前に、FltObjects->FileObject と fltObjects->インスタンス 置き換えます。

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

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

ミニフィルターが 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 操作のサポート関数がない場合にのみ、独自のコールバック データを割り当てる必要があります。

必要条件

要件 価値
ヘッダー 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_ACQUIRE_FOR_MOD_WRITEFLT_PARAMETERS
  • IRP_MJ_ACQUIRE_FOR_SECTION_SYNCHRONIZATIONFLT_PARAMETERS
  • IRP_MJ_CREATEFLT_PARAMETERS
  • IRP_MJ_CREATE_MAILSLOTFLT_PARAMETERS
  • IRP_MJ_CREATE_NAMED_PIPEFLT_PARAMETERS
  • IRP_MJ_DEVICE_CONTROLFLT_PARAMETERS
  • IRP_MJ_DIRECTORY_CONTROLFLT_PARAMETERS
  • IRP_MJ_FAST_IO_CHECK_IF_POSSIBLEFLT_PARAMETERS
  • IRP_MJ_FILE_SYSTEM_CONTROLFLT_PARAMETERS
  • IRP_MJ_INTERNAL_DEVICE_CONTROLFLT_PARAMETERS
  • IRP_MJ_LOCK_CONTROLFLT_PARAMETERS
  • IRP_MJ_MDL_READFLT_PARAMETERS
  • IRP_MJ_MDL_READ_COMPLETEFLT_PARAMETERS
  • IRP_MJ_MDL_WRITE_COMPLETEFLT_PARAMETERS
  • IRP_MJ_NETWORK_QUERY_OPENFLT_PARAMETERS
  • IRP_MJ_PNPFLT_PARAMETERS
  • IRP_MJ_PREPARE_MDL_WRITEFLT_PARAMETERS
  • IRP_MJ_QUERY_EAFLT_PARAMETERS
  • IRP_MJ_QUERY_INFORMATIONFLT_PARAMETERS
  • IRP_MJ_QUERY_OPENFLT_PARAMETERS
  • IRP_MJ_QUERY_QUOTAFLT_PARAMETERS
  • IRP_MJ_QUERY_SECURITYFLT_PARAMETERS
  • IRP_MJ_QUERY_VOLUME_INFORMATIONFLT_PARAMETERS
  • IRP_MJ_READFLT_PARAMETERS
  • IRP_MJ_RELEASE_FOR_MOD_WRITEFLT_PARAMETERS
  • IRP_MJ_RELEASE_FOR_SECTION_SYNCHRONIZATIONFLT_PARAMETERS
  • IRP_MJ_SET_EAFLT_PARAMETERS
  • IRP_MJ_SET_INFORMATIONFLT_PARAMETERS
  • IRP_MJ_SET_QUOTAFLT_PARAMETERS
  • IRP_MJ_SET_SECURITYFLT_PARAMETERS
  • IRP_MJ_SET_VOLUME_INFORMATIONFLT_PARAMETERS
  • IRP_MJ_SYSTEM_CONTROLFLT_PARAMETERS
  • IRP_MJ_VOLUME_MOUNTFLT_PARAMETERS
  • IRP_MJ_WRITEFLT_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