1

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

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

请你给我建议。谢谢

4

1 回答 1

4

引用MSDN 关于 Win32 错误代码

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

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

请参阅关于页表虚拟内存的维基百科,以了解更多关于操作系统如何建立地址空间的信息。用这种说法,在那个内存范围的某个地方有一个无效的页表条目。

实际上,查看您的代码...很明显这行不通。BaseAddress参数为零。您正在尝试取消引用另一个进程的地址空间中的 NULL 指针。如果目标进程本身试图拉取它,它就会崩溃。:-) EXE 的标头未映射到地址 0。如果您尝试从 EXE 文件本身读取,我建议只需调用CreateFileGetModuleFileNameEx.

于 2011-09-10T20:04:42.010 回答