FsRtlMdlReadDev 関数 (ntifs.h)

FsRtlMdlReadDev ルーチンは、ファイル キャッシュ内の指定されたバイト範囲を直接指すメモリ記述子リスト (MDL) を返します。

構文

BOOLEAN FsRtlMdlReadDev(
  [in]             PFILE_OBJECT     FileObject,
  [in]             PLARGE_INTEGER   FileOffset,
  [in]             ULONG            Length,
  [in]             ULONG            LockKey,
  [out]            PMDL             *MdlChain,
  [out]            PIO_STATUS_BLOCK IoStatus,
  [ in, optional ] PDEVICE_OBJECT   DeviceObject
);

パラメーター

[in] FileObject

キャッシュされたファイルのファイル オブジェクトへのポインター。

[in] FileOffset

データを保持するキャッシュされたファイル内の開始バイト オフセットを指定する変数へのポインター。

[in] Length

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

[in] LockKey

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

[out] MdlChain

出力時に、メモリ記述子リスト (MDLs) のリンクされたリストへのポインター。

[out] IoStatus

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

[ in, optional ] DeviceObject

ファイルが開かれているデバイス オブジェクトへのポインター。

戻り値

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

注釈

FsRtlMdlReadDev ルーチンは、通常の IRP メカニズムをバイパスし、呼び出し元がキャッシュされたファイル データに直接アクセスするために使用できるメモリ記述子リスト (MDL) のリンクされたリストを返します。 この操作はデータをコピーまたはバッファーしないため、通常の読み取りよりもはるかに高速です。

このルーチンは 、CcMdlRead および FltFastIoMdlRead に似ています。 FltFastIoMdlReadCcMdlReadおよび FsRtlMdlReadDev は、キャッシュされたファイル データを含むページをロックして、システムがこれらのページをページ ファイルにスワップしないようにします。 呼び出し元が FsRtlMdlReadCompleteDev ルーチンを呼び出すまで、ページはメモリ内でロックされたままになります。

要件

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

こちらもご覧ください

CcMdlRead

FsRtlMdlReadCompleteDev

FsRtlMdlReadEx