FltFastIoPrepareMdlWrite 函式 (fltkernel.h)
FltFastIoPrepareMdlWrite 例程會傳回記憶體描述項清單的連結清單, (MDLs) 指向指定的快取檔案數據範圍,以便將數據直接寫入快取。
語法
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 。
備註
FltFastIoPrepareMdlWrite 類似於 FsRtlCopyWrite,不同之處在於 FltFastIoPrepareMdlWrite 不會將數據複製到快取。 相反地,呼叫端將覆寫的實體頁面會鎖定在記憶體中, 而 FltFastIoPrepareMdlWrite 會傳回指向指定位元組範圍的一或多個記憶體描述元清單 (MDL) 。 鎖定的頁面會維持鎖定狀態,直到呼叫端呼叫 FltFastIoMdlWriteComplete 為止。
MDL 指向的頁面會鎖定在記憶體中,但不會對應到系統空間中。 呼叫端可以呼叫 MmGetSystemAddressForMdlSafe 來執行此對應。
即使 FltFastIoPrepareMdlWrite 呼叫失敗,可能已配置一或多個 MDL。 呼叫端可以檢查 IoStatus.Information 的值,以判斷是否已發生此情況。 如果有,呼叫端必須呼叫 FltFastIoMdlWriteComplete 以釋放配置的 MDLs。
規格需求
需求 | 值 |
---|---|
目標平台 | Universal |
標頭 | fltkernel.h (包含 Ntifs.h) |
程式庫 | NtosKrnl.lib |
Dll | NtosKrnl.exe |
IRQL | <= APC_LEVEL |