Функция 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 в этом разделе блокируются в системном пространстве и устанавливают счетчик ссылок на один.

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

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

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

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

Требования

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

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

MmLockPagableCodeSection

MmLockPagableDataSection

MmPageEntireDriver

MmProbeAndLockPages

MmResetDriverPaging

MmUnlockPagableImageSection