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

Подпрограмма MmLockPagableDataSection блокирует весь раздел данных драйвера в системном пространстве.

Синтаксис

PVOID MmLockPagableDataSection(
  [in] PVOID AddressWithinSection
);

Параметры

[in] AddressWithinSection

Задает символьный адрес одного элемента данных в разделе, который можно выстраить.

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

MmLockPagableDataSection возвращает непрозрачное значение, определяющее раздел. Это значение необходимо передать впоследствии в MmLockPagableSectionByHandle или в MmUnlockPagableImageSection.

Комментарии

Драйверы могут использовать эту подпрограмму , MmLockPagableSectionByHandle и MmUnlockPagableImageSection , чтобы сделать свои личные данные, которые обычно доступны для страниц, заблокированы в памяти.

Данные можно заблокировать, если:

  • Доступ к данным обычно осуществляется в <= APC_LEVEL, но к ним может потребоваться доступ на более высоких уровнях IRQL в течение коротких периодов времени.

  • Драйвер использует данные редко и предсказуемо.

Например, драйверы для микшерных устройств используют разделы pageable-data. Так как драйвер использует достаточно данных для создания раздела pageable-data и драйвер знает, когда данные нужны, такой драйвер использует MmLockPagableDataSection, MmLockPagableSectionByHandle и MmUnlockPagableImageSection , чтобы при необходимости перенести раздел данных в системное пространство и сделать его доступным для выгружаемого, когда это не нужно.

При одном вызове MmLockPagableDataSection весь раздел, содержащий указанные данные, будет заблокирован в системном пространстве.

Блокировка раздела является дорогостоящей операцией. Если раздел pageable-data заблокирован драйвером в нескольких местах, используйте MmLockPagableDataSection для первого запроса. Выполните последующие запросы блокировки, вызвав MmLockPagableSectionByHandle, передав дескриптор, возвращенный MmLockPagableDataSection. Блокировка с помощью дескриптора значительно повышает производительность драйвера. Заблокированный раздел разблокируется путем вызова MmUnlockPagableImageSection.

Диспетчер памяти поддерживает количество ссылок на раздел. Раздел pageable-data доступен для выгрузки, только если количество ссылок равно нулю. Каждый запрос на блокировку увеличивает количество; Каждый запрос на разблокировку уменьшает количество. Драйвер должен разблокировать раздел столько раз, сколько он блокирует раздел, чтобы гарантировать, что такой раздел будет доступен для различения, когда раздел не требуется. Дескриптор всегда действителен, независимо от количества. Если счетчик для дескриптора равен нулю и выполняется вызов MmLockPagableSectionByHandle, то значение счетчика устанавливается в единицу, а если раздел был выгружается, он будет выгружается на страницу.

Данные в разделе pageable-data помечены директивой компилятора. Чтобы создать раздел страничных данных, используйте #pragma data_seg ("PAGE") в начале модуля данных и #pragma data_seg () в конце модуля. В ключевое слово PAGE учитывается регистр, то есть PAGE должна быть прописной буквой.

Обратите внимание, что существует также #pragma data_seg ("INIT"), который используется для отмены данных после инициализации системы. За исключением использования INIT , а не PAGE, синтаксис аналогичен. Однако результат не является; Использование директивы PAGE делает раздел данных доступным для страниц. При использовании директивы INIT данные в разделе удаляются, как только драйвер возвращается из своей процедуры входа в драйвер или повторной инициализации, если драйвер имеет ее.

Дополнительные сведения о разбиении данных на страницы см. в статье Создание драйверов на страницы.

Требования

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

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

MmLockPagableCodeSection

MmLockPagableSectionByHandle

MmPageEntireDriver

MmResetDriverPaging

MmUnlockPagableImageSection