Функция MmMapLockedPagesWithReservedMapping (wdm.h)

Подпрограмма MmMapLockedPagesWithReservedMapping сопоставляет весь диапазон адресов или часть диапазона адресов, который ранее был зарезервирован подпрограммой MmAllocateMappingAddress .

Синтаксис

PVOID MmMapLockedPagesWithReservedMapping(
  [in] PVOID                                                    MappingAddress,
  [in] ULONG                                                    PoolTag,
  [in] PMDL                                                     MemoryDescriptorList,
  [in] __drv_strictTypeMatch(__drv_typeCond)MEMORY_CACHING_TYPE CacheType
);

Параметры

[in] MappingAddress

Указатель на начало зарезервированного диапазона виртуальной памяти. Это должен быть адрес, ранее возвращенный MmAllocateMappingAddress.

[in] PoolTag

Указывает тег пула для буфера зарезервированной памяти. Это значение должно совпадать со значением, указанным в параметре PoolTag вызова MmAllocateMappingAddress , который зарезервировал буфер.

[in] MemoryDescriptorList

Указатель на MDL, который должен быть сопоставлен. Этот MDL должен описывать физические страницы, которые заблокированы. Заблокированный MDL можно создать с помощью процедуры MmProbeAndLockPages или MmAllocatePagesForMdlEx .

[in] CacheType

Указывает значение MEMORY_CACHING_TYPE , используемое для создания сопоставления.

Возвращаемое значение

MmMapLockedPagesWithReservedMapping возвращает указатель на начало сопоставленной памяти или значение NULL , если системе не удалось сопоставить память. Эта подпрограмма возвращает значение NULL , только если в параметрах функции есть ошибка (например, адрес сопоставления драйвера недостаточно велик для охвата предоставленного MDL). Эта функция предназначена для того, чтобы позволить драйверам добиться прогресса даже в сценариях с нехваткой ресурсов.

Комментарии

Вызывающий объект может использовать MmMapLockedPagesWithReservedMapping для сопоставления поддиапазона диапазона виртуальной памяти, зарезервированного MmAllocateMappingAddress , следующим образом:

  • Используйте IoAllocateMdl для выделения MDL. Возвращаемый MDL создается с использованием указанного начального адреса и размера поддиапа диапазона виртуальной памяти для сопоставления.

  • Используйте MmProbeAndLockPages , чтобы заблокировать физические страницы, описанные В MDL, полученном на шаге 1.

  • Используйте MmMapLockedPagesWithReservedMapping , чтобы фактически сопоставить виртуальную память с физической памятью, которая была заблокирована на шаге 2. Обратите внимание, что виртуальный адрес, возвращаемый этой функцией, содержит смещение байтов, указанное MDL. Однако поле MappedSystemVa MDL, заданное этой функцией, не включает смещение байтов.

  • Когда вызывающему объекту не требуется доступ к памяти, она отменяет сопоставление памяти с помощью MmUnmapReservedMapping. Вызывающий объект может сопоставлять и отменять сопоставление буфера памяти по мере необходимости и должен удалить его перед освобождением диапазона сопоставления с помощью MmFreeMappingAddress.

Обратите внимание, что параметр MappingAddress указывает начало диапазона памяти, ранее зарезервированного вызывающей стороны, а не начало поддиапазона памяти для сопоставления. Вызывающий объект указывает начальный адрес и длину буфера при выделении MDL с помощью IoAllocateMdl. Буфер должен помещаться внутри зарезервированного диапазона памяти, но он может быть строгим подмножеством.

Подпрограмма использует параметр CacheType только в том случае, если страницы, описанные в MDL, еще не имеют связанного типа кэша. Однако почти во всех случаях страницы уже имеют связанный тип кэша, и этот тип кэша используется в новом сопоставлении. Исключением из этого правила являются страницы, выделенные mmAllocatePagesForMdl, с которыми не связан определенный тип кэша. Для таких страниц параметр CacheType определяет тип кэша сопоставления.

Требования

Требование Значение
Минимальная версия клиента Доступно в Windows XP и более поздних версиях Windows.
Целевая платформа Универсальное
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
Правила соответствия DDI HwStorPortProhibitedDIS(storport)

См. также раздел

IoAllocateMdl

MEMORY_CACHING_TYPE

MmAllocateMappingAddress

MmAllocatePagesForMdl

MmAllocatePagesForMdlEx

MmFreeMappingAddress

MmProbeAndLockPages

MmUnmapReservedMapping