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


Работа со страницами

Чтобы определить размер страницы на текущем компьютере, используйте функцию GetSystemInfo .

Функции VirtualQuery и VirtualQueryEx возвращают сведения о области последовательных страниц, начиная с указанного адреса в адресном пространстве процесса. VirtualQuery возвращает сведения о памяти в вызывающем процессе. VirtualQueryEx возвращает сведения о памяти в указанном процессе и используется для поддержки отладчиков, которым требуются сведения об отлаживаемом процессе. Область страниц ограничена указанным адресом, округленным до ближайшей границы страницы. Он распространяется на все последующие страницы со следующими общими атрибутами:

  • Состояние всех страниц одинаково: зафиксировано, зарезервировано или бесплатно.
  • Если начальная страница не является бесплатной, все страницы в регионе являются частью того же начального выделения страниц, которые были зарезервированы вызовом VirtualAlloc.
  • Защита доступа для всех страниц одинакова (то есть PAGE_READONLY, PAGE_READWRITE или PAGE_NOACCESS).

Функция VirtualLock позволяет процессу заблокировать одну или несколько страниц зафиксированной памяти в физической памяти (ОЗУ), не позволяя системе переключить страницы на файл подкачки. Его можно использовать для обеспечения доступности критически важных данных без доступа к диску. Блокировка страниц в памяти опасна, так как ограничивает возможности системы по управлению памятью. Чрезмерное использование VirtualLock может снизить производительность системы, так как исполняемый код будет переключен на файл подкачки. Функция VirtualUnlock разблокирует память, заблокированную VirtualLock.

Функция VirtualProtect позволяет процессу изменять защиту доступа к любой зафиксированной странице в адресном пространстве процесса. Например, процесс может выделить страницы для чтения и записи для хранения конфиденциальных данных, а затем изменить доступ только для чтения или без доступа для защиты от случайной перезаписи. VirtualProtect обычно используется со страницами, выделенными VirtualAlloc, но также работает со страницами, зафиксированными любыми другими функциями выделения. Однако VirtualProtect изменяет защиту целых страниц, и указатели, возвращаемые другими функциями, не обязательно выравниваются по границам страницы. Функция VirtualProtectEx похожа на VirtualProtect, но изменяет защиту памяти в указанном процессе. Изменение защиты полезно отладчикам при доступе к памяти отлаживаемого процесса.