Создание драйверов для страничных страниц

По умолчанию компоновщик назначает такие имена, как .text" и .data, разделам кода и данных файла образа драйвера. При загрузке драйвера диспетчер операций ввода-вывода делает эти разделы не погашенными. Раздел без пахов всегда находится в памяти.

Разработчик драйверов может сделать выделенные части драйвера доступными для страниц, чтобы Windows могли перемещать эти части в файл подкачки, когда они не используются. Чтобы сделать раздел кода или данных страничной, разработчик драйвера назначает разделу имя, начинающееся с "PAGE". При загрузке драйвера диспетчер ввода-вывода проверяет имена разделов. Если имя раздела начинается с PAGE, диспетчер операций ввода-вывода делает раздел пригодным для страниц.

Код, который выполняется в IRQL >= DISPATCH_LEVEL, должен быть резидентным в памяти. Это значит, что этот код должен находиться либо в сегменте, не допускаемом для страниц, либо в сегменте с возможностью страницы, заблокированном в памяти. Если код, выполняемый в IRQL >= DISPATCH_LEVEL вызывает ошибку страницы, проверка возникает ошибка. Драйверы могут использовать макрос PAGED_CODE , чтобы убедиться, что функции, доступные для страниц, вызываются только в соответствующих списках IRQL.

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

Сведения о назначении имен разделам кода и данных см. в разделах MmLockPagableCodeSection и MmLockPagableDataSection.

Этот раздел содержит следующие подразделы:

Когда код и данные должны быть доступны для страниц?

Создание страницы кода драйвера или данных