Fungsi CcPrepareMdlWrite (ntifs.h)

Rutinitas CcPrepareMdlWrite menyediakan akses langsung ke memori file yang di-cache sehingga pemanggil dapat menulis data ke file.

Sintaks

void CcPrepareMdlWrite(
  [in]  PFILE_OBJECT     FileObject,
  [in]  PLARGE_INTEGER   FileOffset,
  [in]  ULONG            Length,
  [out] PMDL             *MdlChain,
  [out] PIO_STATUS_BLOCK IoStatus
);

Parameter

[in] FileObject

Penunjuk ke objek file untuk file yang di-cache.

[in] FileOffset

Penunjuk ke variabel yang menentukan offset byte awal dalam file cache tempat data akan ditulis.

[in] Length

Panjang byte data yang akan ditulis ke cache sistem.

[out] MdlChain

Rantai satu atau beberapa daftar deskriptor memori (MDL) yang menjelaskan halaman tempat data akan ditulis.

[out] IoStatus

Penunjuk ke struktur IO_STATUS_BLOCK. Jika panggilan ke CcPrepareMdlWrite berhasil, IoStatus.Status diatur ke STATUS_SUCCESS. Jika tidak, kode ini diatur ke kode kesalahan NTSTATUS yang sesuai. IoStatus.Information diatur ke jumlah byte aktual yang berhasil dikunci dalam rantai MDL.

Nilai kembali

Tidak ada

Keterangan

CcPrepareMdlWrite mirip dengan CcCopyWrite, kecuali bahwa data tidak disalin ke file cache. Sebaliknya, halaman fisik yang akan ditimpa dalam cache sistem dikunci dalam memori, dan CcPrepareMdlWrite mengembalikan satu atau beberapa daftar deskriptor memori (MDL) yang menjelaskan rentang byte yang ditentukan. Halaman-halaman ini tetap terkunci dalam memori sampai CcMdlWriteComplete atau CcMdlWriteAbort dipanggil. Dengan demikian setiap panggilan ke CcPrepareMdlWrite harus diikuti dengan panggilan ke CcMdlWriteComplete atau CcMdlWriteAbort.

Perhatikan bahwa halaman yang dijelaskan oleh MDL dikunci dalam memori, tetapi tidak dipetakan dalam ruang sistem. Pemanggil dapat melakukan pemetaan ini dengan memanggil MmGetSystemAddressForMdlSafe.

Perhatikan bahwa meskipun panggilan ke CcPrepareMdlWrite gagal, satu atau beberapa MDL mungkin telah dialokasikan. Pemanggil dapat memeriksa nilai IoStatus.Information untuk menentukan apakah ini telah terjadi. Jika sudah, pemanggil harus memanggil CcMdlWriteComplete untuk membebaskan MDL yang dialokasikan.

Jika terjadi kegagalan, CcPrepareMdlWrite menimbulkan pengecualian status untuk kegagalan tertentu tersebut. Misalnya, jika kegagalan alokasi kumpulan terjadi, CcPrepareMdlWrite menimbulkan pengecualian STATUS_INSUFFICIENT_RESOURCES; jika terjadi kesalahan I/O, CcPrepareMdlWrite akan memunculkan pengecualian status kesalahan I/O. Oleh karena itu, untuk mendapatkan kontrol jika kegagalan terjadi, driver harus membungkus panggilan ke CcPrepareMdlWrite dalam pernyataan try-except atau try-finally .

Untuk membuat cache file, gunakan CcInitializeCacheMap.

Persyaratan

Persyaratan Nilai
Target Platform Universal
Header ntifs.h (termasuk Ntifs.h)
Pustaka NtosKrnl.lib
DLL NtosKrnl.exe
IRQL < DISPATCH_LEVEL

Lihat juga

CcCopyWrite

CcInitializeCacheMap

CcMdlWriteAbort

CcMdlWriteComplete

IoAllocateMdl

IoBuildPartialMdl

MmGetMdlByteCount

MmGetMdlByteOffset

MmGetMdlPfnArray

MmGetMdlVirtualAddress

MmGetSystemAddressForMdl

MmGetSystemAddressForMdlSafe

MmInitializeMdl

MmMapLockedPages

MmPrepareMdlForReuse

MmProbeAndLockPages

MmUnlockPages

MmUnmapLockedPages