Составители:
Рубрика:
DWORD fdwNewProtect, // новые флаги защиты
PDWORD pfdwOldProtect, // переменная, в которую
// записываются старые флаги);…
Аргументы lpvAddress и dwSize служат для указания диапазона адресов
защищаемой памяти. Параметры fdwNewProtect и pfdwOldProtect содержат по
одному из флагов защиты: PAGE_NOACCESS,
PAGE_READONLY или
PAGE_READWRITE.
Эти флаги применяются к целым страницам. При уста-
новке такого флага изменяется уровень защиты всех страниц, включенных в за-
данный диапазон, даже тех, что входят в него частично. Параметр pfdwOldProtect
возвращает предыдущее состояние первой страницы заданного диапазона.
Функция VirtualProtect() работает только с закрепленными страницами.
Если какая-либо страница в заданном диапазоне не закреплена, эта функция
возвращает ошибку. Однако не обязательно, чтобы все страницы диапазона
имели одинаковые флаги защиты. Основное достоинство защиты страниц за-
ключается в их предохранении от ошибок вашей собственной программы.
В ряде случаев необходима информация об определенном блоке памя-
ти. Например, перед записью данных в страницу целесообразно проверить,
закреплена ли она. Функция VirtualQuery() заполняет поля структуры
MEMORY_BASIC_INFORMATION
информацией о заданном блоке памяти:
DWORD VirtualQuery
(LPVOID lpvAddress, // адрес описываемой области
PMEMORY_BASIC_INFORMATION pmbiBuffer,
// адрес буфера описания
DWORD dwLength ), // размер буфера описания);...
typedef struct _MEMORY_BASIC_INFORMATION
{
PVOID BaseAddress, // базовый адрес группы страниц PVOID
AllocationBase, // адрес наибольшего выделенного блока
DWORD AllocationProtect, // первоначальный уровень
// защиты выделенного блока
DWORD Regionsize, // размер группы страниц в байтах
DWORD State, // закреплена, зарезервирована, свободна
DWORD Protect, // уровень защиты группы
DWORD Type, // тип страниц (всегда MEM_PRIVATE)
} MEMORY_BASIC_INFORMATION;
typedef MEMORY_BASIC_INFORMATION
*PMEMORY_BASIC_INFORMATION;…
Параметр lpvAddress функции VirtualQuery() служит для указания произ-
вольного адреса. Любой заданный адрес может принадлежать двум выделен-
ным блокам. Он может являться частью большого диапазона зарезервирован-
ных страниц или же входить в меньший блок страниц, которые были
закреплены и вновь зарезервированы или защищены. Блок состоит из последо-
49
DWORD fdwNewProtect, // новые флаги защиты
PDWORD pfdwOldProtect, // переменная, в которую
// записываются старые флаги);…
Аргументы lpvAddress и dwSize служат для указания диапазона адресов
защищаемой памяти. Параметры fdwNewProtect и pfdwOldProtect содержат по
одному из флагов защиты: PAGE_NOACCESS, PAGE_READONLY или
PAGE_READWRITE. Эти флаги применяются к целым страницам. При уста-
новке такого флага изменяется уровень защиты всех страниц, включенных в за-
данный диапазон, даже тех, что входят в него частично. Параметр pfdwOldProtect
возвращает предыдущее состояние первой страницы заданного диапазона.
Функция VirtualProtect() работает только с закрепленными страницами.
Если какая-либо страница в заданном диапазоне не закреплена, эта функция
возвращает ошибку. Однако не обязательно, чтобы все страницы диапазона
имели одинаковые флаги защиты. Основное достоинство защиты страниц за-
ключается в их предохранении от ошибок вашей собственной программы.
В ряде случаев необходима информация об определенном блоке памя-
ти. Например, перед записью данных в страницу целесообразно проверить,
закреплена ли она. Функция VirtualQuery() заполняет поля структуры
MEMORY_BASIC_INFORMATION информацией о заданном блоке памяти:
DWORD VirtualQuery
(LPVOID lpvAddress, // адрес описываемой области
PMEMORY_BASIC_INFORMATION pmbiBuffer,
// адрес буфера описания
DWORD dwLength ), // размер буфера описания);...
typedef struct _MEMORY_BASIC_INFORMATION
{
PVOID BaseAddress, // базовый адрес группы страниц PVOID
AllocationBase, // адрес наибольшего выделенного блока
DWORD AllocationProtect, // первоначальный уровень
// защиты выделенного блока
DWORD Regionsize, // размер группы страниц в байтах
DWORD State, // закреплена, зарезервирована, свободна
DWORD Protect, // уровень защиты группы
DWORD Type, // тип страниц (всегда MEM_PRIVATE)
} MEMORY_BASIC_INFORMATION;
typedef MEMORY_BASIC_INFORMATION
*PMEMORY_BASIC_INFORMATION;…
Параметр lpvAddress функции VirtualQuery() служит для указания произ-
вольного адреса. Любой заданный адрес может принадлежать двум выделен-
ным блокам. Он может являться частью большого диапазона зарезервирован-
ных страниц или же входить в меньший блок страниц, которые были
закреплены и вновь зарезервированы или защищены. Блок состоит из последо-
49
Страницы
- « первая
- ‹ предыдущая
- …
- 47
- 48
- 49
- 50
- 51
- …
- следующая ›
- последняя »
