ReadProcessMemory em um proces de 64 bits sempre retorna o erro 299

Estou tendo alguns problemas com ReadProcessMemory Meu código é de 64 bits Eu posso ler a memória de qualquer processo de 32 bits, mas ReadProcessMemory sempre falha com código de erro 299 (leitura parcial) retornando 0 bytes lidos.

Feito minha pesquisa e a maioria das respostas estavam relacionadas a privilégios, mas tenho o token de Depuração ativado e rodando como admin, o endereço que eu leio no ImageBase no cabeçalho opcional do PE

Eu tentei verificar o status da página usando VirtualQueryEx e tenho acesso negado!

Nota: O código é executado perfeitamente em qualquer processo de 32 bits.

Alguma idéia do que talvez esteja causando isso?

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 <<"vp done \n";
}
else cout << " vp err :" << GetLastError() << endl;
PMEMORY_BASIC_INFORMATION pmbi = new MEMORY_BASIC_INFORMATION;
if(VirtualQueryEx(hProcess,(LPVOID)address,pmbi,sizeof(MEMORY_BASIC_INFORMATION)))
{
    cout << "protection :" << pmbi->AllocationProtect << endl;
}
char value = 0;
SIZE_T * pbytes = new SIZE_T ;
ReadProcessMemory(hProcess,(LPCVOID)address ,&value,sizeof(value),pbytes);
cout << value << endl;
printf("Read status : %d ; bytes read %d  \n",GetLastError() , *pbytes );
CloseHandle(hProcess);

questionAnswers(2)

yourAnswerToTheQuestion