Убедитесь, что вы вызываете VirtualProtectEx для установки правильного уровня защиты в памяти, которую вы хотите прочитать / записать.
Подумав об этом, вероятно, это не проблема, так как большая часть памяти имеет доступ для чтения, но для установки уровня защиты выполните что-то вроде этого (в C ++)
(без проверки ошибок и просто с использованием случайного адреса памяти, но вы должны понять)
char buffer[256];
DWORD oldProtect = 0;
DWORD numRead = 0;
VirtualProtectEx( hProc, (LPVOID)0x77810F34, 256, PAGE_EXECUTE_READWRITE, &oldProtect );
ReadProcessMemory( hProc, (LPVOID)0x77810F34, buffer, 256, &numRead );
VirtualProtectEx( hProc, (LPVOID)0x77810F34, 256, oldProtect, NULL ); //restore the original protection when you're done