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 

Ответы на вопрос(2)

Ваш ответ на вопрос