次の方法で共有


IRP_MJ_PREPARE_MDL_WRITE 共用体の FLT_PARAMETERS

FLT_IO_PARAMETER_BLOCK.MajorFunction が IRP_MJ_PREPARE_MDL_WRITE の時に次の FLT_PARAMETERS 共用体メンバーが使用されます。

構文

typedef union _FLT_PARAMETERS {
  ...    ;
  struct {
    LARGE_INTEGER           FileOffset;
    ULONG POINTER_ALIGNMENT Length;
    ULONG POINTER_ALIGNMENT Key;
    PMDL                    *MdlChain;
  } PrepareMdlWrite;
  ...    ;
} FLT_PARAMETERS, *PFLT_PARAMETERS;

メンバー

  • PrepareMdlWrite: 次のメンバーが含まれる構造体。

  • FileOffset: キャッシュされたファイル内の開始バイト。

  • Length: キャッシュされたファイルに書き込まれるデータの長さ (バイト単位)。

  • Key: ターゲット ファイルのバイト範囲ロックに関連付けられているキー値。 書き込む範囲が重複している場合、またはファイル内で排他的にロックされた範囲のサブ範囲である場合、このパラメーターはその排他ロックのキーである必要があります。 排他ロックは、呼び出し元スレッドの親プロセスによって保持される必要があります。それ以外の場合、このパラメーターは無視されます。

  • MdlChain: 書き込まれるデータを含むページを記述する 1 つ以上のメモリ記述子リスト (MDL) のチェーンへのポインターを受け取る変数へのポインター。

解説

IRP_MJ_PREPARE_MDL_WRITE は高速 I/O 操作です。 これは、次の違いを除いて IRP_MJ_WRITE + IRP_MN_MDL と同じことを行います。

  • IRP ベースの操作は、MDL 作業を行う前にまだキャッシュされていない場合は、ファイルのキャッシュを設定します。
  • ファイルがまだキャッシュされていない場合、高速 IO 操作は失敗します。

IRP_MJ_PREPARE_MDL_WRITE 操作の FLT_PARAMETERS 構造体には、高速 I/O PrepareMdlWrite 操作のパラメーターが含まれています。 操作はコールバック データ (FLT_CALLBACK_DATA) 構造体によって表されます。 これは FLT_IO_PARAMETER_BLOCK 構造体に含まれています。操作のパラメーターは Iopb が指す FLT_IO_PARAMETER_BLOCK 構造体にあります。

高速 I/O IRP_MJ_PREPARE_MDL_WRITE 要求が失敗した場合、I/O の発行者は要求の再発行方法を決定します。 ミニフィルターは、IRP ベースの IRP_MJ_MDL_WRITE を常に取得するとは限りません。 たとえば、IRP 要求は IRP_MJ_WRITE + IRP_MN_MDL として再発行できます。

要件

要件タイプ 要件
ヘッダー Fltkernel.h (Fltkernel.h を含む)

関連項目

FLT_CALLBACK_DATA

FLT_IO_PARAMETER_BLOCK

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_PARAMETERS