ReadProcessMemory总是在GLE: 299时失败
ReadProcessMemory Always fails with GLE: 299
有人可以帮助我,我不知道为什么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
。
相关文章:
- GetShortPathName在网络驱动器上使用中文文件夹时失败
- Active Directory:从网络服务帐户下运行的Windows服务调用ADsOpenObject时失败
- libprotobuf 检查在 Mac OS 上执行程序时失败
- 将 const 转换为 const char* 无效,我该如何解决?使用 gcc7 时失败
- CudaMalloc 在分配内存时失败
- G++ 内联在调用always_inline "int _rdrand16_step()"时失败
- 我的快速排序在对预排序的项目进行排序时失败,如何改进?
- 编译成功,使用 clang 5.0.1/6.0.0 ,在 5.0.2/6.0.1 时失败
- 使用"hana::is_valid"在常量引用时失败
- 为什么在谷歌测试中调用"mkdtemp()"时失败
- 为什么我的 Hippomock 期望在使用多重继承时失败
- 为什么这个来自 Objective-C++ 的dynamic_cast在调试中成功但在发布时失败?
- 使用提升对字符串进行标记化时,将令牌转换为 char* const* 时失败
- SDL_CreateWindow在设置标志时失败SDL_WINDOW_VULKAN
- Android Studio 链接器命令在包含 Boost 库时失败
- C++ 链表合并排序的实现在连接 1 个以上节点的子列表时失败
- mkdir 从命令行工作,但在使用 NFS 时C++失败
- 内联在调用always_inline"__m256d _mm256_broadcast_sd(常量双倍*)"时失败
- JavACPP在功能歧义时失败
- ReadProcessMemory总是在GLE: 299时失败