Составители:
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 служит для указания произвольного
адреса. Любой заданный адрес может принадлежать двум выделенным блокам. Он мо-
жет являться частью большого диапазона зарезервированных страниц или же входить в
меньший блок страниц, которые были закреплены и вновь зарезервированы или защи-
щены. Блок состоит из последовательного набора страниц с одинаковыми атрибутами.
В поле BaseAddress функция VirtualQuery возвращает адрес первой страницы
меньшего блока, который содержит ячейку с адресом, заданным аргументом lpvAddress.
В поле AllocationBase возвращается адрес большего зарезервированного блока страниц,
содержащего данную ячейку. Значение параметра AllocationBase совпадает со значени-
ем, возвращаемым функцией VirtualAlloc. Если функция VirtualAlloc применила к ука-
занному диапазону определенный флаг защиты, он может быть возвращен в виде значе-
ния поля AllocationProtect (PAGE_NOACCESS, PAGE_READONLY ИЛИ
PAGE_READWRITE).
114
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 служит для указания произвольного
адреса. Любой заданный адрес может принадлежать двум выделенным блокам. Он мо-
жет являться частью большого диапазона зарезервированных страниц или же входить в
меньший блок страниц, которые были закреплены и вновь зарезервированы или защи-
щены. Блок состоит из последовательного набора страниц с одинаковыми атрибутами.
В поле BaseAddress функция VirtualQuery возвращает адрес первой страницы
меньшего блока, который содержит ячейку с адресом, заданным аргументом lpvAddress.
В поле AllocationBase возвращается адрес большего зарезервированного блока страниц,
содержащего данную ячейку. Значение параметра AllocationBase совпадает со значени-
ем, возвращаемым функцией VirtualAlloc. Если функция VirtualAlloc применила к ука-
занному диапазону определенный флаг защиты, он может быть возвращен в виде значе-
ния поля AllocationProtect (PAGE_NOACCESS, PAGE_READONLY ИЛИ
PAGE_READWRITE).
114
Страницы
- « первая
- ‹ предыдущая
- …
- 110
- 111
- 112
- 113
- 114
- …
- следующая ›
- последняя »
