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

IoAllocateMdl

MEMORY_CACHING_TYPE

MmAllocateMappingAddress

MmAllocatePagesForMdl

MmAllocatePagesForMdlEx

MmFreeMappingAddress

MmProbeAndLockPages

MmUnmapReservedMapping