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 |