I have similar problem!
EnableDebugPrivileges not guilty. If anything it's not, then the result of reading the memory was filled to zero.
I think this happens because another threads who write memory at a time when you read it.
ReadProcessMemmory returns FALSE if an error occurred while reading from memory.
Code:
ReadProcessMemory(handle2, (LPCVOID)base, &base, sizeof(buffer), &rw);
In this case: if the value of your variable "rw" is less than or not equal to the number of bytes a fourth argument, "sizeof (buffer)" then the value of the third argument is not right.
A good test of what you read, it seems to this
Code:
DWORD rw = 0;
BOOL ret = ReadProcessMemory(handle2, (LPCVOID)base, &base, sizeof(buffer), &rw);
if( ret == FALSE || rw != sizeof(buffer) )
{
//Read FAILED
}