次の方法で共有


FltFastIoPrepareMdlWrite 関数 (fltkernel.h)

FltFastIoPrepareMdlWrite ルーチンは、キャッシュされたファイル データの指定範囲を指すメモリ記述子リスト (MDL) のリンクされたリストを返して、キャッシュにデータを直接書き込みます。

構文

BOOLEAN FLTAPI FltFastIoPrepareMdlWrite(
        PFLT_INSTANCE    InitiatingInstance,
  [in]  PFILE_OBJECT     FileObject,
  [in]  PLARGE_INTEGER   FileOffset,
  [in]  ULONG            Length,
  [in]  ULONG            LockKey,
  [out] PMDL             *MdlChain,
  [out] PIO_STATUS_BLOCK IoStatus
);

パラメーター

InitiatingInstance

呼び出し元の不透明なインスタンス ポインター。 このパラメーターは必須であり、 NULL にすることはできません。

[in] FileObject

ファイル オブジェクトへのポインター。

[in] FileOffset

データを保持するキャッシュ内の開始バイト オフセットを指定する値へのポインター。

[in] Length

キャッシュから読み取るデータの長さ (バイト単位)。

[in] LockKey

ロックするバイト範囲に関連付けられている値。 ロックする範囲が、既にロックされている別の範囲と非排他的ロックで重なっている場合、または読み取る範囲が、排他的にロックされていない別の範囲のサブ範囲である場合は、このパラメーターの値がその非排他的ロックのキーである必要があります。 ロックは、呼び出し元スレッドの親プロセスによって保持されている必要があります。 それ以外の場合、このパラメーターは無効です。

[out] MdlChain

出力時に、キャッシュされたデータ内のバイト範囲を指すメモリ記述子リスト (MDL) のリンクされたリストへのポインター。

[out] IoStatus

出力時に転送の状態を含む IO_STATUS_BLOCK 構造体へのポインター。 操作が成功した場合、 IoStatus.Status は STATUS_SUCCESS に設定されます。 それ以外の場合は、適切な NTSTATUS エラー コードに設定されます。 IoStatus.Information は、ルーチンが正常にロックされた実際のバイト数に設定されます。

戻り値

FltFastIoPrepareMdlWrite ルーチンは、操作が成功した場合は TRUE、操作が失敗した場合は FALSE を返します。

注釈

FltFastIoPrepareMdlWriteFsRtlCopyWrite に似ていますが、 FltFastIoPrepareMdlWrite はキャッシュにデータをコピーしません。 代わりに、呼び出し元が上書きする物理ページはメモリ内でロックされ、 FltFastIoPrepareMdlWrite は、指定されたバイト範囲を指す 1 つ以上のメモリ記述子リスト (MDL) を返します。 ロックされたページは、呼び出し元が FltFastIoMdlWriteComplete を呼び出すまでロックされたままになります。

MDP が指すページはメモリ内でロックされますが、システム空間にはマップされません。 呼び出し元は、 MmGetSystemAddressForMdlSafe を呼び出すことによって、このマッピングを実行できます。

FltFastIoPrepareMdlWrite の呼び出しが失敗した場合でも、1 つ以上の MDL が割り当てられている可能性があります。 呼び出し元は IoStatus.Information の値を調べて、これが発生したかどうかを判断できます。 存在する場合、呼び出し元は FltFastIoMdlWriteComplete を呼び出して、割り当てられた MDL を解放する必要があります。

要件

要件
対象プラットフォーム ユニバーサル
Header fltkernel.h (Ntifs.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL <= APC_LEVEL

こちらもご覧ください

FltFastIoMdlWriteComplete

FsRtlCopyWrite

MmGetSystemAddressForMdlSafe