winapi – ReadProcessMemory在某些页面上失败(GetLastError()=
发布时间:2020-12-14 03:58:28 所属栏目:Windows 来源:网络整理
导读:我尝试读取进程的所有提交页面(Win7-64).在大多数页面上它可以工作,但几页失败.我无法解释原因.这是我的测试程序(编译x32,在Win7-64中测试): #include windows.hvoid main(){ HANDLE hProc = OpenProcess(PROCESS_VM_READ | PROCESS_QUERY_INFORMATION,FALS
我尝试读取进程的所有提交页面(Win7-64).在大多数页面上它可以工作,但几页失败.我无法解释原因.这是我的测试程序(编译x32,在Win7-64中测试):
#include <windows.h> void main() { HANDLE hProc = OpenProcess(PROCESS_VM_READ | PROCESS_QUERY_INFORMATION,FALSE,GetCurrentProcessId()); SYSTEM_INFO si; ZeroMemory(&si,sizeof(SYSTEM_INFO)); GetSystemInfo(&si); char* buf = new char[si.dwPageSize]; for (unsigned i = 0; i < 0x7fff0; i++) { void* baSEOffs = (void*) (i * si.dwPageSize); MEMORY_BASIC_INFORMATION mbi; ZeroMemory(&mbi,sizeof(MEMORY_BASIC_INFORMATION)); if (VirtualQueryEx(hProc,baSEOffs,&mbi,sizeof(MEMORY_BASIC_INFORMATION)) == 0) { MessageBox(NULL,TEXT("VirtualQueryEx failed"),TEXT(""),MB_OK); } if (mbi.State == MEM_COMMIT) { SIZE_T numByteWritten = 0; if(ReadProcessMemory(hProc,buf,si.dwPageSize,&numByteWritten) == FALSE) OutputDebugString(TEXT("badn")); //GetLastError()==ERROR_PARTIALLY_READ; numByteWritten == 0; else OutputDebugString(TEXT("goodn")); } } delete[] buf; } 我厌倦了查看失败页面的MEMORY_BASIC_INFORMATION,但我没有发现任何奇怪的东西.失败页面的数量也因运行而异(平均约为5).什么阻止我阅读这些页面?我是否需要调整进程令牌中的某些权限? 解决方法
确定了一些调试和有趣的事情:所有失败的页面都设置了保护位PAGE_GUARD(参见
MSDN doc).在我解释文档时,您无法使用ReadProcessMemory读取这些页面.
if(ReadProcessMemory(hProc,&numByteWritten) == FALSE) { assert(mbi.Protect & 0x100); OutputDebugString(TEXT("badn")); //GetLastError()==ERROR_PARTIALLY_READ; numByteWritten == 0; } else { assert(!(mbi.Protect & 0x100)); OutputDebugString(TEXT("goodn")); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- Jmeter无GUI启动
- windows – 使用Win32 API查找图标资源中的图标数
- windows – 为什么在lisp中计算到10亿这么慢?
- 在Windows x64上使用RtlAddFunctionTable描述动态
- 打印 – 在Windows Server上打印服务器与打印机共
- 服务器安全设置技术实例系列教程--IIS用户设置方
- windows-server-2008 – Windows 7 x64 Ultimate
- active-directory – kinit&pam_sss:获取初
- windows – 如何在软件安装期间锁定普通(非管理员
- windows-server-2012-r2 – DSC拉动计划随机停止
热点阅读