ReadProcessMemory на 64-битном процессе всегда возвращает ошибку 299
У меня возникли некоторые проблемы с ReadProcessMemory. Мой код 64-битный. Я могу прочитать память любого 32-битного процесса, но ReadProcessMemory всегда дает сбой, код ошибки 299 (частичное чтение) возвращает 0 байтов.
Закончил свое исследование, и большинство ответов были связаны с привилегиями, но у меня включен токен отладки, и я работаю от имени администратора. Адрес, с которого я прочитал базу изображений в необязательном заголовке PE
Я попытался проверить статус страницы с помощью VirtualQueryEx и получил отказ в доступе!
Примечание: код отлично работает на любом 32-битном процессе.
Есть идеи, что может быть причиной этого?
HANDLE hProcess;
DWORD pid;
EnableDebugPriv();
pid=GetProcessByName("winmine.exe"); //32 bit apps work
//pid=GetProcessByName("notepad.exe"); //64 bit apps dont
hProcess = OpenProcess(PROCESS_ALL_ACCESS ,0, pid);
if(!hProcess)
{
printf("failed to acquire handle , Error %d \n" , GetLastError());
return FAILED;
}
//DEBUGGING
//DWORD address = 0x100000000; //64 notepad
DWORD address = 0x1000000; // 32 bit minsweeper
DWORD oldProtect=0;
printf("DEBUG pid %d - last err :%d \n" , GetProcessId(hProcess) , GetLastError() );
if(VirtualProtectEx(hProcess , (LPVOID)address,4096 /*pagesize for test*/ , PAGE_EXECUTE_READWRITE , &oldProtect))
{
cout