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


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

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

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

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

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

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

В этом разделе приведены следующие разделы:

Когда код и данные должны размещаться на страницах памяти?

Делание кода драйвера или данных страничными