共用方式為


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

另請參閱

FltFastIoMdlWriteComplete

FsRtlCopyWrite

MmGetSystemAddressForMdlSafe