Функция MmLockPagableSectionByHandle (ntddk.h)
В mmLockPagableSectionByHandle подпрограмма блокирует код страницы или раздел данных в системную память путем увеличения количества ссылок на дескриптор к разделу.
Синтаксис
void MmLockPagableSectionByHandle(
[in] PVOID ImageSectionHandle
);
Параметры
[in] ImageSectionHandle
Дескриптор для страницного кода или раздела данных. Вызывающий объект получил этот дескриптор из предыдущего вызова mmLockPagableCodeSec tion или подпрограммы MmLockPagableDataSection.
Возвращаемое значение
Никакой
Замечания
Драйвер изначально вызывает MmLockPagableCodeSection или MmLockPagableDataSection, чтобы получить дескриптор в коде или разделе данных. Затем драйвер может вызывать MmLockPagableSectionByHandle и MmUnlockPagableImageSection для увеличения и уменьшения количества ссылок на дескриптор.
mmLockPagableCodeSection или MmLockPagableDataSection вызывает раздел с страницами в системную память, возвращает дескриптор в раздел и инициализирует счетчик ссылок на дескриптор на один. MmLockPagableSectionByHandle увеличивает количество ссылок по одному, а MmUnlockPagableImageSection уменьшает количество ссылок по одному.
Если число ссылок в дескрипторе ненулевое, раздел страницы заблокирован. Если число ссылок равно нулю, раздел разблокируется.
Дескриптор раздела с страницами остается допустимым, пока драйвер остается загруженным в памяти. Драйвер может использовать один и тот же дескриптор для многократной блокировки и разблокировки раздела. То есть драйвер может повторно использовать дескриптор, число ссылок которого равно нулю. MmLockPagableSectionByHandle проверяет, является ли указанный раздел резидентом в адресном пространстве вызывающего объекта и, если это так, просто увеличивает количество ссылок в разделе. Если раздел не является резидентным, mmLockPagableSectionByHandle страницы в разделе, блокирует его в системном пространстве и задает для него значение ссылки.
Чтобы избежать утечки системной памяти, количество ссылок на дескриптор должно быть равно нулю при выгрузке драйвера из памяти. В противном случае раздел, доступный для страниц, останется заблокированным в системной памяти после выгрузки драйвера.
Если драйвер готовится к выгрузке, а количество ссылок на дескриптор ненулевое, драйвер должен вызвать MmUnlockPagableImageSection, чтобы уменьшать число до нуля перед выгрузкой.
Драйвер не может вызывать MmLockPagableSectionByHandle для блокировки буферов пользователей, передаваемых в irPs. Вместо этого используйте MmProbeAndLockPage s.
Дополнительные сведения о коде и данных по страницам см. в разделе Созданиедля страниц драйверов.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Доступно начиная с Windows 2000. |
целевая платформа | Всеобщий |
заголовка | ntddk.h (include Ntddk.h) |
библиотеки | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |
правил соответствия DDI | HwStorPortProhibitedDIs(storport), IrqlMmApcLte(wdm) |