有人可以帮助我,我不知道为什么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
我的应用程序以管理员身份运行,我尝试读取的应用程序是标准用户模式应用程序。
请你告诉我。 感谢
答案 0 :(得分:4)
ERROR_PARTIAL_COPY
299(0x12B)
只完成了ReadProcessMemory或WriteProcessMemory请求的一部分。
我的猜测是你指定的地址包含一些有效数据,但在该地址和(地址+副本长度)之间,没有内存映射。
请参阅wikipedia on page table或virtual memory以了解有关操作系统如何建立地址空间的更多信息。按照这种说法,在该内存范围内的某个地方有一个无效的页表条目。
实际上,查看你的代码......很明显,这不会起作用。 BaseAddress
参数为零。您正试图在其他进程的地址空间中取消引用NULL指针。如果目标进程本身试图拉动它,它就会崩溃。 :-) EXE的标题未映射到地址0.如果您尝试从EXE文件本身读取,我建议您在CreateFile
获取的路径上调用GetModuleFileNameEx
。