Друзья! Вот код Код (Text): if (!(VirtualAllocEx (handl_processa, (void*)0X401000, 2, MEM_RESERVE, PAGE_READWRITE ))) { printf ("VirtualAllocEx не работает\n"); printf ("GetLastError= %x\n", GetLastError ()); system ("pause"); return 0; } Вот VirtualAllocEx всегда не работает. Это я выделяю память в адресном пространстве стороннего процесса, чтобы туду что-то записать GetLastError выдаёт 1e7. Вообще караул, такой ошибки нет в списке (смотрел в winerror.h) Что не так? Хэндл (handl_processa) вроде валидный, равен 1с. найден: Код (Text): hProcess = OpenProcess([b]PROCESS_VM_WRITE | PROCESS_VM_OPERATION[/b], 0, pe32.th32ProcessID); Спасибо за внимание.
Так этот адрес уже занят -- туда отображен исполняемый целевого процесса. Если хочется изменить атрибуты памяти на PAGE_READWRITE, то надо сделать VirtualProtectEx. Или выбрать другой адрес.
Такм в том-то и дело, что мне надо ПО ЗАНЯТОМУ АДРЕСУ ПИСАТЬ Используя VirtualProtectEx, верно. Но! Вот здесь http://www.podgoretsky.pri.ee/ftp/Docs/Delphi/Memory/virtual/VirtualProtectEx.html (как использовать VirtualProtectEx) написано: "Все страницы указанного региона должны быть зарезерыированы одним из вызовов VirtualAlloc или VirtualAllocEx с исползование флага MEM_RESERVE." Ну и так далее. То есть последовательность использования функций такая: сперва VirtualAllocEx потом VirtualProtectEx И никак иначе. Вот в чём дело всё.
Кто не выделяется? Ну в общем, я щас так сработал: VirtualProtectEx WriteProcessMemory И всё получилось. Но вопрос: куда же мне приткнуть VirtualAllocEx, если написано, что без неё вроде как нельзя... Но получилось. Получиться получилось, а каша в головуе осталась.
amvoz Память резервируется для того, чтобы иной сторонний запрос на аллокацию не позволил бы выделить память из зарезервированного региона. Например под стек резервируется много страниц, но выделяются они по одной. Иначе другой поток при запросе на аллокацию мог получить часть стека первого потока, что закончилось бы крахом. Вот первая аллокация резервирует память без выделения её, вторая выделяет её в зарезервированном регионе. В образе память уже выделена, вы можите освободить её и изменить атрибуты страниц, но нельзя выделить регион, который уже выделен.