有人可以帮助我,我不知道为什么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

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

请你告诉我。
谢谢

最佳答案

引用MSDN on Win32 error codes:



我的猜测是您指定的地址包含一些有效数据,但是在该地址和(地址+复制长度)之间的某个地方,没有映射内存。

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

实际上,查看您的代码...显然这是行不通的。 BaseAddress参数为零。您试图在另一个进程的地址空间中取消引用NULL指针。如果目标进程本身试图拉出它,则它将崩溃。 :-) EXE的 header 未映射到地址0。如果尝试从EXE文件本身读取数据,我建议您简单地在CreateFile获得的路径上调用GetModuleFileNameEx

关于c++ - ReadProcessMemory始终因GLE而失败:299,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7374285/

10-11 19:19