Примеры использования

Создание защищаемых страниц

Windows NT/2000:

Использвоание защищаемых страниц позволяет вам получить оповещение при попытке доступа к страницам. Это может быть полезно для приложений, отслеживающих рост больших динамически растущих структур данных. Так операционная система использует атрибуты защиты страниц для реализации автоматической проверки стека потока.

Для создания защищаемой страницы укажите атрибут защиты PAGE_GUARD для нужной вам страницы. Это можно сделать при помощи одной из функций, меняющих атрибуты защиты страниц: VirtualAlloc, VirtualAllocEx, VirtualProtect и VirtualProtectEx.

При попытке обращения к защищаемой странице, система возбуждает исключительную ситуацию с кодом STATUS_GUARD_PAGE ($80000001). При этом система также очищает статус PAGE_GUARD для указанной страницы, поэтому при последующих обращениях к странице исключительной ситуации не возникает.

Если данная исключительная ситуация случилась в сервисе, то типичным поведением сервиса будет выдача сообщения об ошибке. Но поскольку система уже сняла со страницы статус защищаемой, то при последующих обращениях к этой странице не возникнет исключительной ситуации STATUS_GUARD_PAGE, естесственно, что мы предполагаем, что никто не возобновил для указанной страницы статус PAGE_GUARD.

В приведенном ниже простеньком примере показано поведение страниц со статусом PAGE_GUARD. В программе сначала выделяется страница памяти с атрибутом PAGE_GUARD, потом к ней происходит первая попытка доступа - как результат код ошибки STATUS_GUARD_PAGE. Потом к ней происходит вторая попытка доступа, которая заканчивается успешно. Типичный вывод программы состоит в следющем:

Размер страницы на данном компьютере составляет 4096.
Выделено 4096 байт по адресу $00960000.
Невозможно зафиксировать память по адресу $00960000 ошибка $80000001
2-я попытка: фиксация страницы по адресу $00960000 произведена успешно.
Нажмите Enter...

В данном примере не показано, как следует использовать статус PAGE_GUARD для отлеживания состояния динамически развивающихся больших структур данных, таких как стек.

Ссылка на пример

НазадРабота со страницами СправочникВперед

© Mystic, 2002