Could someone please help me, I do not know why the ReadProcessMemory function fails and GetLastError = 299. Here is my code, I can’t see that im doing anything wrong.
if(ReadProcessMemory(hProcess, (void*)0, IDH_Buffer, sizeof(IMAGE_DOS_HEADER), 0) != true)
std::cout << "Failed to read from Process, GLE=" << GetLastError() << "\n";
IDH_Buffer has be assigned, hProcess is non NULL
My App is running as Admin and the app that im trying to read from is a standard usermode application.
Please could you advise me.
Thanks
Quoting from MSDN on Win32 error codes:
My guess is the address you specified contained some valid data, but somewhere between that address and (address + length of copy), there was no memory mapped.
See wikipedia on page table or virtual memory to understand a bit more about how an operating system establishes an address space. In that parlance, somewhere in that memory range there was a page table entry that was not valid.
Actually, looking at your code… It’s obvious that this won’t work. The
BaseAddressparameter is zero. You’re trying to dereference a NULL pointer in the other process’s address space. If the target process itself tried to pull this, it would crash. 🙂 The EXE’s header is not mapped to address 0. If you are trying to read from the EXE file itself, I would suggest simply callingCreateFileon a path obtained byGetModuleFileNameEx.