Bagikan melalui


Fungsi MmBuildMdlForNonPagedPool (wdm.h)

Rutinitas MmBuildMdlForNonPagedPool menerima MDL yang menentukan buffer memori virtual yang tidak di-patahkan, dan memperbaruinya untuk menjelaskan halaman fisik yang mendasar.

Sintaks

void MmBuildMdlForNonPagedPool(
  [in, out] PMDL MemoryDescriptorList
);

Parameter

[in, out] MemoryDescriptorList

Penunjuk ke MDL yang menentukan buffer memori virtual dalam memori yang tidak di-patah. Pemanggil menggunakan rutinitas IoAllocateMdl untuk membuat MDL untuk buffer ini.

Nilai kembali

Tidak ada

Keterangan

Pada entri, MDL yang ditentukan harus menjelaskan buffer dalam memori sistem yang tidak di-patah atau dalam memori yang dikunci (halaman fisik tidak dapat diperdagangkan), seperti memori yang dialokasikan oleh rutinitas ExAllocatePoolWithTag dengan PoolType = NonPagedPool atau oleh rutinitas MmAllocateContiguousMemorySpecifyCache . MmBuildMdlForNonPagedPool memperbarui MDL untuk menjelaskan halaman fisik yang mendasar.

MmBuildMdlForNonPagedPool tidak dapat digunakan dengan MDL yang menjelaskan buffer yang dialokasikan pada tumpukan kernel. Untuk membangun MDL yang menjelaskan buffer tumpukan kernel, driver harus memanggil MmProbeAndLockPages. Ini karena halaman tumpukan kernel dapat diperdagangkan kecuali jika diperiksa dan dikunci. Aturan ini berlaku meskipun driver menjamin bahwa tumpukan kernel tidak dapat di-page out.

Karena halaman yang dijelaskan oleh MDL sudah tidak dapat dihalangi dan sudah dipetakan ke ruang alamat sistem, driver tidak boleh mencoba menguncinya dengan menggunakan rutinitas MmProbeAndLockPages , atau untuk membuat pemetaan ruang alamat sistem tambahan dengan menggunakan rutinitas MmMapLockedPagesSpecifyCache . Demikian pula, driver tidak boleh mencoba membuka kunci halaman dengan menggunakan rutinitas MmUnlockPages , atau untuk merilis pemetaan ruang alamat sistem yang ada dengan menggunakan rutinitas MmUnmapLockedPages . Jika driver melakukan salah satu operasi ilegal ini pada MDL yang dibangun oleh MmBuildMdlForNonPagedPool, perilaku yang dihasilkan tidak terdefinisi.

Meneruskan MDL yang dibangun oleh MmBuildMdlForNonPagedPool ke rutinitas MmGetSystemAddressForMdlSafe diizinkan. Panggilan MmGetSystemAddressForMdlSafe , dalam hal ini, hanya mengembalikan alamat virtual awal buffer yang dijelaskan oleh MDL.

Driver dapat menggunakan rutinitas MmMapLockedPagesSpecifyCache untuk memetakan MDL yang dibangun oleh MmBuildMdlForNonPagedPool ke dalam ruang alamat virtual pengguna. Namun, driver harus melakukan operasi ini dengan cara yang menghindari masalah keamanan tertentu. Untuk informasi selengkapnya, lihat MmMapLockedPagesSpecifyCache.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Tersedia dimulai dengan Windows 2000.
Target Platform Universal
Header wdm.h (termasuk Wdm.h, Ntddk.h, Ntifs.h)
Pustaka NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <=DISPATCH_LEVEL

Lihat juga

ExAllocatePoolWithTag

MmAllocateContiguousMemorySpecifyCache

MmGetSystemAddressForMdlSafe

MmMapLockedPagesSpecifyCache

MmProbeAndLockPages

MmUnlockPages

MmUnmapLockedPages