ReadProcessMemory总是在GLE: 299时失败

ReadProcessMemory Always fails with GLE: 299

本文关键字:299时 失败 GLE ReadProcessMemory      更新时间:2023-10-16

有人可以帮助我,我不知道为什么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在Win32上的错误代码:

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

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

参见维基百科的页表或虚拟内存,以了解更多关于操作系统如何建立地址空间的信息。也就是说,在内存范围的某个地方存在一个无效的页表项。

实际上,看看你的代码…很明显,这行不通。BaseAddress参数为0。您正在尝试解引用另一个进程的地址空间中的NULL指针。如果目标进程本身试图拉这个,它就会崩溃。:-) EXE的头文件没有映射到地址0。如果您试图从EXE文件本身读取,我建议简单地在GetModuleFileNameEx获得的路径上调用CreateFile