Fungsi MmMapLockedPagesWithReservedMapping (wdm.h)
Rutinitas MmMapLockedPagesWithReservedMapping memetakan semua atau sebagian rentang alamat yang sebelumnya dicadangkan oleh rutinitas MmAllocateMappingAddress .
Sintaks
PVOID MmMapLockedPagesWithReservedMapping(
[in] PVOID MappingAddress,
[in] ULONG PoolTag,
[in] PMDL MemoryDescriptorList,
[in] __drv_strictTypeMatch(__drv_typeCond)MEMORY_CACHING_TYPE CacheType
);
Parameter
[in] MappingAddress
Penunjuk ke awal rentang memori virtual yang dipesan. Ini harus merupakan alamat yang sebelumnya dikembalikan oleh MmAllocateMappingAddress.
[in] PoolTag
Menentukan tag kumpulan untuk buffer memori yang dipesan. Ini harus identik dengan nilai yang ditentukan dalam parameter PoolTag panggilan ke MmAllocateMappingAddress yang mencadangkan buffer.
[in] MemoryDescriptorList
Penunjuk ke MDL yang akan dipetakan. MDL ini harus menjelaskan halaman fisik yang dikunci. MDL yang terkunci dapat dibangun oleh rutinitas MmProbeAndLockPages atau MmAllocatePagesForMdlEx .
[in] CacheType
Menentukan nilai MEMORY_CACHING_TYPE yang akan digunakan untuk membuat pemetaan.
Nilai kembali
MmMapLockedPagesWithReservedMapping mengembalikan pointer ke awal memori yang dipetakan, atau NULL jika sistem tidak dapat memetakan memori. Rutinitas ini mengembalikan NULL hanya jika ada kesalahan dalam parameter fungsi (misalnya, alamat pemetaan driver tidak cukup besar untuk menjangkau MDL yang disediakan). Fungsi ini dimaksudkan untuk memungkinkan driver membuat kemajuan ke depan bahkan dalam skenario sumber daya rendah.
Keterangan
Pemanggil dapat menggunakan MmMapLockedPagesWithReservedMapping untuk memetakan subrange rentang memori virtual yang dicadangkan oleh MmAllocateMappingAddress sebagai berikut:
Gunakan IoAllocateMdl untuk mengalokasikan MDL. MDL yang dikembalikan dibangun menggunakan alamat awal dan ukuran subrange rentang memori virtual yang ditentukan untuk dipetakan.
Gunakan MmProbeAndLockPages untuk mengunci halaman fisik yang dijelaskan oleh MDL yang diperoleh pada langkah 1.
Gunakan MmMapLockedPagesWithReservedMapping untuk benar-benar memetakan memori virtual ke memori fisik yang dikunci di langkah 2. Perhatikan bahwa alamat virtual yang dikembalikan oleh fungsi ini memang menyertakan offset byte yang ditentukan MDL. Namun, bidang MappedSystemVa dari MDL yang ditetapkan oleh fungsi ini tidak menyertakan offset byte.
Setelah pemanggil tidak perlu mengakses memori, pemanggil tidak mem-unmap memori dengan MmUnmapReservedMapping. Pemanggil dapat memetakan dan membatalkan pemetaan buffer memori sesuai kebutuhan, dan harus membatalkan pemetaan sebelum membebaskan rentang pemetaan dengan MmFreeMappingAddress.
Perhatikan bahwa parameter MappingAddress menentukan awal rentang memori yang sebelumnya dicadangkan oleh pemanggil, bukan awal subrange memori yang akan dipetakan. Pemanggil menentukan alamat awal dan panjang buffer saat mengalokasikan MDL dengan IoAllocateMdl. Buffer harus pas di dalam rentang memori yang dipesan, tetapi dapat menjadi subset yang ketat.
Rutinitas menggunakan parameter CacheType hanya jika halaman yang dijelaskan oleh MDL belum memiliki jenis cache yang terkait dengannya. Namun, dalam hampir semua kasus, halaman sudah memiliki jenis cache terkait, dan jenis cache ini digunakan oleh pemetaan baru. Pengecualian untuk aturan ini adalah untuk halaman yang dialokasikan oleh MmAllocatePagesForMdl, yang tidak memiliki jenis cache tertentu yang terkait dengannya. Untuk halaman tersebut, parameter CacheType menentukan jenis cache pemetaan.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Tersedia di Windows XP dan versi Windows yang lebih baru. |
Target Platform | Universal |
Header | wdm.h (termasuk Wdm.h, Ntddk.h, Ntifs.h) |
Pustaka | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |
Aturan kepatuhan DDI | HwStorPortProhibitedDDIs(storport) |
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk