Поделиться через


Функция MmLockPagableSectionByHandle (ntddk.h)

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

Синтаксис

void MmLockPagableSectionByHandle(
  [in] PVOID ImageSectionHandle
);

Параметры

[in] ImageSectionHandle

Дескриптор для страничного кода или раздела данных. Вызывающий объект получил этот дескриптор из предыдущего вызова процедуры MmLockPagableCodeSection или MmLockPagableDataSection .

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

None

Remarks

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

Вызов MmLockPagableCodeSection или MmLockPagableDataSection блокирует страничный раздел в системной памяти, возвращает дескриптор разделу и инициализирует количество ссылок на дескриптор до единицы. MmLockPagableSectionByHandle увеличивает число ссылок на единицу, а MmUnlockPagableImageSection уменьшает количество ссылок на единицу.

Если число ссылок на дескриптор не равно нулю, раздел, доступный для страницы, блокируется. Если число ссылок равно нулю, раздел разблокируется.

Дескриптор раздела с возможностью страницы остается действительным до тех пор, пока драйвер остается загруженным в памяти. Драйвер может использовать один и тот же дескриптор для многократной блокировки и разблокировки раздела. То есть драйвер может повторно использовать дескриптор, число ссылок которого равно нулю. MmLockPagableSectionByHandle проверяет, находится ли упоминаемый раздел в адресном пространстве вызывающего объекта, и, если это так, просто увеличивает количество ссылок в разделе. Если раздел не является резидентным, mmLockPagableSectionByHandle страницы в разделе блокирует его в системном пространстве и устанавливает для счетчика ссылок значение 1.

Чтобы избежать утечки системной памяти, количество ссылок на дескрипторе должно быть равно нулю при выгрузке драйвера из памяти. В противном случае раздел, доступный для страницы, останется заблокированным в системной памяти после выгрузки драйвера.

Если драйвер готовится к выгрузке, а количество ссылок на дескрипторе не равно нулю, драйвер должен вызвать MmUnlockPagableImageSection для уменьшения счетчика до нуля перед выгрузкой.

Драйвер не может вызвать MmLockPagableSectionByHandle для блокировки пользовательских буферов, передаваемых в IRP. Вместо этого используйте MmProbeAndLockPages .

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

Требования

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

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

MmLockPagableCodeSection

MmLockPagableDataSection

MmPageEntireDriver

MmProbeAndLockPages

MmResetDriverPaging

MmUnlockPagableImageSection