共用方式為


FsRtlPrepareMdlWriteEx 函式 (ntifs.h)

FsRtlPrepareMdlWriteEx 例程會傳回記憶體描述元清單的連結清單, (MDLs) 指向指定的快取檔案數據範圍,以將數據直接寫入快取。 如果寫入的快取支持無法使用,例程會還原為以 IRP 為基礎的 MDL 寫入作業。

語法

NTSTATUS FsRtlPrepareMdlWriteEx(
  [in]  PFILE_OBJECT     FileObject,
  [in]  PLARGE_INTEGER   FileOffset,
  [in]  ULONG            Length,
  [in]  ULONG            LockKey,
  [out] PMDL             *MdlChain,
  [out] PIO_STATUS_BLOCK IoStatus
);

參數

[in] FileObject

檔案物件的指標。

[in] FileOffset

值的指標,指定保留數據的快取內的起始位元組位移。

[in] Length

要寫入快取之數據的位元組長度。

[in] LockKey

值,與要鎖定的位元組範圍相關聯。 如果鎖定的範圍重疊另一個已鎖定且具有非排除鎖定的範圍,或要讀取的範圍是另一個範圍子範圍,且該範圍已非永久鎖定,則此參數中的值必須是該非例外鎖定的索引鍵。 鎖定必須由呼叫線程的父進程保留。 否則,此參數不會有任何作用。

[out] MdlChain

輸出時,記憶體描述項連結清單的指標會 (MDL) 指向快取數據內的位元組範圍。

[out] IoStatus

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

傳回值

FsRtlPrepareMdlWriteEx傳回STATUS_SUCCESS 或適當的 NTSTATUS 值,例如下列其中一項:

傳回碼 Description
STATUS_INSUFFICIENT_RESOURCES
無法配置 IRP 型寫入的 IRP。

備註

如果文件系統可以使用快速 I/ O,FsRtlPrepareMdlWriteEx 例程會略過一般的 IRP 寫入機制,並傳回記憶體描述元清單的連結清單, (MDL) 呼叫端可用來直接將數據寫入檔案快取。 呼叫端將會覆寫的實體頁面會鎖定在記憶體中,而且可以直接寫入至 ,而不是將數據緩衝數據複製到快取中。 FsRtlPrepareMdlWriteEx 會傳回指向指定位元組範圍的一或多個記憶體描述元清單) (MDL。

如果未啟用快速 I/ O,FsRtlPrepareMdlWriteEx 會產生同步 IRP 型 MDL 寫入準備,並傳回從要求配置的 MDL。

MDL 指向的頁面會鎖定在記憶體中,但不會對應到系統空間。 呼叫端可以呼叫 MmGetSystemAddressForMdlSafe 來執行此對應。

每個 FsRtlPrepareMdlWriteEx 的呼叫都必須接著對 CcMdlWriteComplete 的呼叫。

規格需求

需求
目標平台 Universal
標頭 ntifs.h (包含 Ntifs.h)
程式庫 NtosKrnl.lib
Dll NtosKrnl.exe
IRQL PASSIVE_LEVEL

另請參閱

CcMdlWriteComplete

CcPrepareMdlWrite

MmGetSystemAddressForMdlSafe