共用方式為


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

在輸出中,記憶體描述元清單連結清單的指標(MDL)。

[out] IoStatus

輸出中 IO_STATUS_BLOCK 結構的指標,其中包含傳輸的狀態。 如果作業成功,IoStatus.Status 設定為 STATUS_SUCCESS。 否則,它會設定為適當的NTSTATUS錯誤碼。 IoStatus.Information 設定為例程成功鎖定的實際位元組數目。

[ in, optional ] DeviceObject

開啟檔案之裝置物件的指標。

傳回值

如果作業成功,FsRtlMdlReadDev 例程會傳回 TRUE TRUE,如果作業失敗,FALSE

言論

FsRtlMdlReadDev 例程會略過一般的 IRP 機制,並傳回呼叫端可用來直接存取快取檔案數據之內存描述元清單的連結清單(MDL)。 此作業不會複製或緩衝數據,因此比一般讀取快得多。

例程類似於 CcMdlReadFltFastIoMdlReadFltFastIoMdlReadCcMdlReadFsRtlMdlReadDev 鎖定包含快取檔案數據的頁面,以防止系統將這些頁面交換至頁面檔案。 在呼叫端叫用 FsRtlMdlReadCompleteDev 例程之前,頁面會保持鎖定在記憶體中。

要求

要求 價值
目標平臺 普遍
標頭 ntifs.h (include Ntifs.h)
連結庫 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

另請參閱

CcMdlRead

FsRtlMdlReadCompleteDev

FsRtlMdlReadEx