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 ,如果作業失敗則傳回 FALSE 。
備註
FsRtlMdlReadDev 例程會略過一般的 IRP 機制,並傳回記憶體描述元清單的連結清單, (MDL) 呼叫者可用來直接存取快取的檔案數據。 這項作業不會複製或緩衝數據,因此比一般讀取更快。
例程類似於 CcMdlRead 和 FltFastIoMdlRead。 FltFastIoMdlRead、 CcMdlRead 和 FsRtlMdlReadDev 會鎖定包含快取檔案數據的頁面,以防止系統將這些頁面交換至頁面檔案。 在呼叫端叫用 FsRtlMdlReadCompleteDev 例程之前,頁面會保持鎖定在記憶體中。
規格需求
需求 | 值 |
---|---|
目標平台 | Universal |
標頭 | ntifs.h (包含 Ntifs.h) |
程式庫 | NtosKrnl.lib |
Dll | NtosKrnl.exe |
IRQL | <= APC_LEVEL |