ReadProcessMemory总是因GLE而失败:299

时间:2011-09-10 20:01:46

标签: c++ readprocessmemory

有人可以帮助我,我不知道为什么ReadProcessMemory函数失败并且GetLastError = 299.这是我的代码,我看不出我做错了什么。

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,hProcess为非NULL

我的应用程序以管理员身份运行,我尝试读取的应用程序是标准用户模式应用程序。

请你告诉我。 感谢

1 个答案:

答案 0 :(得分:4)

引自MSDN on Win32 error codes

ERROR_PARTIAL_COPY
299(0x12B)
只完成了ReadProcessMemory或WriteProcessMemory请求的一部分。

我的猜测是你指定的地址包含一些有效数据,但在该地址和(地址+副本长度)之间,没有内存映射。

请参阅wikipedia on page tablevirtual memory以了解有关操作系统如何建立地址空间的更多信息。按照这种说法,在该内存范围内的某个地方有一个无效的页表条目。

实际上,查看你的代码......很明显,这不会起作用。 BaseAddress参数为零。您正试图在其他进程的地址空间中取消引用NULL指针。如果目标进程本身试图拉动它,它就会崩溃。 :-) EXE的标题未映射到地址0.如果您尝试从EXE文件本身读取,我建议您在CreateFile获取的路径上调用GetModuleFileNameEx