FsRtlPrepareMdlWriteDev 函式 (ntifs.h)
FsRtlPrepareMdlWriteDev 例程會傳回記憶體描述元清單的連結清單(MDLs),指向指定的快取檔案數據範圍,以將數據直接寫入快取。
語法
BOOLEAN FsRtlPrepareMdlWriteDev(
[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
在輸出中,指向快取數據內位元組範圍的記憶體描述元清單連結清單指標。
[out] IoStatus
輸出中 IO_STATUS_BLOCK 結構的指標,其中包含傳輸的狀態。 如果作業成功,IoStatus.Status 設定為 STATUS_SUCCESS。 否則,它會設定為適當的NTSTATUS錯誤碼。 IoStatus.Information 設定為例程成功鎖定的實際位元組數目。
[ in, optional ] DeviceObject
開啟檔案之裝置物件的指標。
傳回值
如果作業成功,FsRtlPrepareMdlWriteDev 例程會傳回 true TRUE,如果作業失敗,FALSE。
言論
FsRtlPrepareMdlWriteDev 類似於 FsRtlCopyWrite,但 FsRtlPrepareMdlWriteDev 不會將數據複製到快取。 相反地,呼叫端將覆寫的實體頁面會鎖定在記憶體中,FsRtlPrepareMdlWriteDev 會傳回指向指定位元組範圍的一或多個記憶體描述元清單 (MDLs)。 鎖定的頁面會保持鎖定,直到呼叫者呼叫 FsRtlMdlWriteCompleteDev為止。
MDL 指向的頁面會鎖定在記憶體中,但不會在系統空間中對應。 呼叫者可以呼叫 MmGetSystemAddressForMdlSafe來執行此對應。
即使呼叫 FsRtlPrepareMdlWriteDev 失敗,可能已配置一或多個 MDL。 呼叫端可以檢查 ioStatus.Information 的值,以判斷是否已發生此狀況。 如果有,呼叫端必須呼叫 FsRtlMdlWriteCompleteDev,以釋放配置的 MDL。
要求
要求 | 價值 |
---|---|
目標平臺 | 普遍 |
標頭 | ntifs.h (include Ntifs.h) |
連結庫 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |