Вообще,как то странно это...к примеру:
Код:
var
EntryPoint : LPDWORD;
Temp_Protect : Cardinal;
begin
VirtualProtectEx(pInfo.hProcess, PPointer(EntryPoint), 2, PAGE_EXECUTE_READWRITE, Temp_Protect);
end;
...работает на ура,а этот вариант:
Код:
var
ProcAddress : LPDWORD;
Temp_Protect : Cardinal;
begin
ProcAddress := LPDWORD(GetProcAddress(GetModuleHandle('Kernel32.dll'), 'LoadLibraryA'));
VirtualProtectEx(pInfo.hProcess, PPointer(ProcAddress), 2, PAGE_EXECUTE_READWRITE, Temp_Protect);
end;
...продолжает упорно возвращать STATUS_CONFLICTING_ADDRESSES, хотя если взять последнюю предоставленную ссылку,то там описывается как раз аналогичный вариант с внедрением своего кода в начало системной функции (только там сразу применяется функция ReadProcessMemory,что кстати странно, т.к. кто гарантирует,что у нас есть право записи в эту страницу памяти ).
Вопрос: почему первый вариант работает,а второй нет ?
Как можно поправить ситуацию ?