Сейчас на форуме: YDS, _MBK_, user99, ManHunter (+6 невидимых)

 eXeL@B —› Основной форум —› Что означают команды VirtualAlloc и VirtualProtectEx?
Посл.ответ Сообщение

Ранг: 6.3 (гость)
Активность: 0=0
Статус: Участник

Создано: 12 декабря 2005 00:58
· Личное сообщение · #1

Что означают команды VirtualAlloc и VirtualProtectEx?




Ранг: 230.5 (наставник)
Активность: 0.180
Статус: Участник
Norg

Создано: 12 декабря 2005 01:05
· Личное сообщение · #2

VirtualProtectEx
Функция VirtualProtect позволяет изменить атрибуты защиты указанного региона виртуального адресного програнства указанного процесса.

{ Вариант 1 }
function VirtualProtectEx(
hProcess: THandle; //дескриптор процесса
lpAddress: Pointer; // начальный адрес фрагмента памяти
dwSize: DWORD; // размер фрагмента памяти
flNewProtect: DWORD; // новые атрибуты защиты
lpflOldProtect: Pointer // старые атрибуты защиты
): BOOL; stdcall; overload;

{ Вариант 2 }
function VirtualProtectEx(
hProcess: THandle; //дескриптор процесса
lpAddress: Pointer; // начальный адрес фрагмента памяти
dwSize: DWORD; // размер фрагмента памяти
flNewProtect: DWORD; // новые атрибуты защиты
var OldProtect: DWORD // старые атрибуты защиты
): BOOL; stdcall; overload;
Параметры

hProcess [in]
Дескриптор процесса, атрибутя защиты страниц виртуального адресного пространства которого будут изменены. Дескриптор должен иметь права доступа PROCESS_VM_OPERATION. Для более детальной информации о правах доступа и флаге PROCESS_VM_OPERATION смотрите функцию OpenProcess

lpAddress [in]
Указывает на начальный адрес диапазона, для которого будут изменены атрибуты защиты страниц.

Все страницы указанного региона должны быть зарезерыированы одним из вызовов VirtualAlloc или VirtualAllocEx с исползование флага MEM_RESERVE. При этом нельзя использовать эту функцию для двух смежных регионов памяти, которые были выделены при помощи двух различных вызовов VirtualAlloc или VirtualAllocEx с использованием флага MEM_RESERVE.

dwSize [in]
Указывает размер в байтах региона, страницы которого должны изменить атрибуты защиты. При этом будут изменены атрибуты всех страниц, в которых присутсвует хотя бы один байт из указанного диапазона от lpAddress до (lpAddress + dwSize). Это означает, в частности, что при попытке зафиксировать в памяти диапазон длиной 2 байта, который берет начало на одной странице, а заканчивается на другой, в памяти будут зафиксированы две страницы памяти (8192 байт).

flNewProtect [in]
Указывает новое значения атрибута защиты страниц. Вы можете указать одно из следующих значений, в сочетании с флагами PAGE_GUARD и PAGE_NOCACHE, если это необходимо.

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

PAGE_READWRITE
Предоставляет права чтения/записи для указанного региона.

PAGE_WRITECOPY
Windows NT/2000 Устанавливает атрибуты защиты "копирование при записи" для указанного диапазона страниц.

PAGE_EXECUTE
Предоставляет права выполнения кода для указанного региона. Попытка чтения/записи страниц указанного региона приведет к нарушению доступа.

PAGE_EXECUTE_READ
Предоставляет права чтения памяти и выполнения кода для указанного региона. Попытка записи в страницы указанного региона приведет к нарушению доступа.

PAGE_EXECUTE_READWRITE
Предоставляет права чтения/записи памяти и выполнения кода для указанного региона.

PAGE_EXECUTE_WRITECOPY
Windows NT/2000 Устанавливает атрибуты защиты "копирование при записи" и выполнения кода для указанного диапазона страниц.

PAGE_GUARD
Windows NT/2000. Делает страницы памяти в указанном регионе защищаемыми. Любая попытка чтения или записи в такие страницы вызовет исключение STATUS_GUARD_PAGE, и одновременно приведет к выключению статуса защищаемости. Таким образом защита страниц может быть отличным способом сигнализации доступа к страницам памяти.

Флаг PAGE_GUARD является модификатором типа защиты страниц. Приложение может использовать этот флаг только в том случае, если обращение к странице происходит без возникновения исключительной ситуации. Указанный флаг нельзя использовать совместно со правами доступа PAGE_NOACCESS. Любая попытка доступа к памяти приводит к тому, что система снимает защиту страницы, оставляя при этом все остальные права доступа к странице.

Если исключение защиты страницы случилось в сервисе, то обычно сервис индицирует появление ошибки.

Windows 95/98. Для симуляции подобного поведения необходимо использовать атрибут защиты страницы PAGE_NOACCESS.

PAGE_NOACCESS
Запрещает любой доступ к странице, которая имеет под собой физическую память. Любая попытка чтения/записи или передачи управления на указанную страницу приводит к исключению нарушения доступа вызываемого общей ошибкой защиты.

PAGE_NOCACHE
Запрещает любое кэширование указанного диапазона страниц. Это аппаратный атрибут физической памяти может быть рассмотрен как "нет кэшированию". Этот атрибут не рекомендуется для обычного использования. Этот атрибут необходим для драйверов устройств, например для проекции кадров видеобуфера без кэширования. Этот атрибут используется только в том случае, когда указан атрибут доступа к странице отличный от PAGE_NOACCESS.


lpflOldProtect [out]
Указатель на переменную, которая принимает старое значение атрбута доступа к памяти для первой страницы из указанного диапазона. Если этот параметр равен nil, или не является правильным указателем на переменную, функция вернет ошибку.

Возвращаемое значение

В случае удачного завершения функция возвращает значение True.

В случае возникновения ошибки возвращаемым значением функции будет False. Для получения расширенной информации об ошибке следует сделать вызов GetLastError.

Описание

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

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

Windows NT/2000: Указание атрибута PAGE_GUARD доступа к странице позволяет создавать в памяти защищаемые страницы. Создание таких страниц позволяет нам отловить попытки доступа к странице. Для большей информации смотрите раздел "Создание защищаемых страниц".

Windows 95/98: Вы не можете использвоать функцию VirtualProtect к любому региону адресного пространства, расположенного внутри разделяемого адресного пространства (от $80000000 до $BFFFFFFF).

Требования

Windows NT/2000: Требуется Windows NT 3.1 или более поздняя версия
Windows 95/98: Требуется Windows 95 или более поздняя версия
Бибиотека: Kernel32.dll
Подключаемый модуль: Windows

-----
M&#225 enginn renna undan &#254v&#237 sem honum er skapa&#240




Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 12 декабря 2005 01:05
· Личное сообщение · #3

SamoVar пишет:
Что означают команды VirtualAlloc и VirtualProtectEx?


SamoVar, Обыкновенный чайник, а говоришь что самовар... Зачем задавать такие глупые вопросы на серёзном форуме? Ведь ответ на них можно __без__труда__ найти где угодно - MS Win32 SDK, MSDN, ya.ru, google.com, microsoft.com...




Ранг: 230.5 (наставник)
Активность: 0.180
Статус: Участник
Norg

Создано: 12 декабря 2005 01:11
· Личное сообщение · #4

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

-----
M&#225 enginn renna undan &#254v&#237 sem honum er skapa&#240




Ранг: 4.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 12 декабря 2005 15:58
· Личное сообщение · #5

SamoVar, Обыкновенный чайник, а говоришь что самовар... Зачем задавать такие глупые вопросы на серёзном форуме? Ведь ответ на них можно __без__труда__ найти где угодно - MS Win32 SDK, MSDN, ya.ru, google.com, microsoft.com...


-Соглачен->в любой справке по delphi, с++ есть данная инфа



Ранг: 4.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 12 декабря 2005 16:01
· Личное сообщение · #6

-Согласен->в любой справке по delphi, с++ есть данная инфа




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 12 декабря 2005 18:55
· Личное сообщение · #7

совсем молодёж обленилась =) сразу в форум.. мда... учитесь узать поиск....

-----
[nice coder and reverser]




Ранг: 4.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 12 декабря 2005 22:07
· Личное сообщение · #8

закажи себе три диска с MSDN на www.505.ru
и больше у тебя не возникнет вопросов связанных с Win32 API,
или зайди на сайт www.microsoft.com




Ранг: 230.5 (наставник)
Активность: 0.180
Статус: Участник
Norg

Создано: 12 декабря 2005 23:54
· Личное сообщение · #9

Тему можно закрыть я дал ответ на вопрос.

-----
M&#225 enginn renna undan &#254v&#237 sem honum er skapa&#240



 eXeL@B —› Основной форум —› Что означают команды VirtualAlloc и VirtualProtectEx?
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати