Работа со страницами
Чтобы определить размер страницы на текущем компьютере, используйте функцию GetSystemInfo.
Функции VirtualQuery и VirtualQueryEx возвращают сведения о регионе последовательных страниц, начиная с указанного адреса в адресном пространстве процесса. VirtualQuery возвращает сведения о памяти в процессе вызова. VirtualQueryEx возвращает сведения о памяти в указанном процессе и используется для поддержки отладчиков, которым требуются сведения об отлаживаемом процессе. Область страниц ограничивается заданным адресом, округленным до ближайшей границы страницы. Он распространяется на все последующие страницы с общими следующими атрибутами:
- Состояние всех страниц одинаково: зафиксировано, зарезервировано или бесплатно.
- Если начальная страница не является свободной, все страницы в регионе входят в одно и то же первоначальное выделение, зарезервированное вызовом VirtualAlloc.
- Защита доступа всех страниц одинакова (то есть PAGE_READONLY, PAGE_READWRITEили PAGE_NOACCESS).
Функция VirtualLock позволяет процессу заблокировать одну или несколько страниц выделенной памяти в физической памяти (ОЗУ), чтобы система не выгружала страницы в файл подкачки. Его можно использовать для обеспечения доступности критически важных данных без доступа к диску. Блокировка страниц в память опасна, так как она ограничивает способность системы управлять памятью. Чрезмерное использование VirtualLock может снизить производительность системы, что приводит к выгрузке исполняемого кода в файл подкачки. Функция VirtualUnlock разблокирует память, заблокированную VirtualLock.
Функция VirtualProtect позволяет процессу изменять защиту доступа любой зафиксированной страницы в адресном пространстве процесса. Например, процесс может выделить страницы с правом чтения и записи для хранения конфиденциальных данных, а затем изменить доступ так, чтобы он был только для чтения или полностью закрытым, чтобы защитить от случайного перезаписи. VirtualProtect обычно используется с страницами, выделенными VirtualAlloc, но также работает с страницами, зафиксированными любой из других функций выделения. Однако VirtualProtect изменяет защиту целых страниц, а указатели, возвращаемые другими функциями, не обязательно выровнены по границам страниц. Функция VirtualProtectEx аналогична VirtualProtect, за исключением того, что она изменяет защиту памяти в указанном процессе. Изменение защиты полезно для отладчиков при доступе к памяти отлаживаемого процесса.