readprocessmemory error 299[通俗易懂]

readprocessmemory error 299[通俗易懂]Itrytoreadallcommitedpagesofaprocess(Win7-64).Onmostpagesitworksbutitfailsforafewpages.Icannotexplainwhy.Hereismytestprogramme(compiledx32,testedinWin7-64):#inclu

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

I try to read all commited pages of a process (Win7-64). On most pages it works but it fails for a few pages. I cannot explain why. Here is my test programme (compiled x32, tested in 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, baseOffs,buf,si.dwPageSize,&numByteWritten) == FALSE) OutputDebugString(TEXT("bad\n")); //GetLastError()==ERROR_PARTIALLY_READ; numByteWritten == 0; else OutputDebugString(TEXT("good\n")); } } delete[] buf; }

I tired to look into the MEMORY_BASIC_INFORMATION for the failing pages but I didn’t find anything strange there. Also the number of failing pages varies from run to run (in average about 5). WHat prevents me from reading these pages? Do I need to adjust some privilges in the process token?

A little bit of debugging and somethings interesting is identified: all pages that fail have protection bit PAGE_GUARD set (see MSDN doc). As I interpret the docs, it is by design that you cannot read these pages with ReadProcessMemory.

if(ReadProcessMemory(hProc, baseOffs,buf,si.dwPageSize,&numByteWritten) == FALSE) { 
     assert(mbi.Protect & 0x100); OutputDebugString(TEXT("bad\n")); //GetLastError()==ERROR_PARTIALLY_READ; numByteWritten == 0;  } else { 
     assert(!(mbi.Protect & 0x100)); OutputDebugString(TEXT("good\n")); }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/185978.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • idea整理代码idea快捷键

    idea整理代码idea快捷键idea整理代码快捷键:Catl+Alt+L

    2022年10月12日
    1
  • windows10虚拟机安装_虚拟机一键安装版

    windows10虚拟机安装_虚拟机一键安装版[XP虚拟机安装]VMware安装XP虚拟机下载VMware下载XPProfessional,我是在这个网站下的http://www.runker.net/windows-xp-sp3.html新建虚拟机,选择典型选择刚刚下载的XP镜像文件(这里用简易安装更方便,如果不用简易安装还需要进BIOS设置CD启动项啥的,安装过程也需要自己一步步操作,麻烦一些)点击下一步,要求填写秘钥,百度搜索秘钥填进去可以参考https://zhidao.baidu.com/question/45439092

    2022年8月16日
    3
  • 设置pip源

    设置pip源我使用pip镜像源有两种方式:一、下载最后加上-ihttp://pypi.doubanio.com/simple–trusted-hostpypi.doubanio.com缺点是每次下载都要粘贴一次,略为麻烦。二、直接更改pip的默认下载源打开这条路径(一般没有pip文件夹,需要自己创建)C:\Users\gaz\pip新建一个txt文件内容为:[global]index-url=https://pypi.douban.com/simple/…

    2022年5月9日
    68
  • free命令详解

    free命令详解

    2021年9月8日
    47
  • Java学习笔记目录索引 (持续更新中)

    Java学习笔记目录索引 (持续更新中)Java学习路线目录索引一、Java基础(省略)Lambda表达式及函数式接口二、Java数据库MySQL一概念、DDL、DML、DQL、事务、约束等数据库设计一多表关系、三大范式JDBC一基本使用、DAO组件、连接池、JDBCTemplate三、JavaWebHTML相关学习CSS—常用属性CSS—选择器及三大特性CSS—网页的布局方式C…

    2022年5月14日
    39
  • 笛卡尔心形函数图像_笛卡尔心形曲线

    笛卡尔心形函数图像_笛卡尔心形曲线js绘制canvas图形varcr=document.getElementById(“cardioid”);varW=cr.width/2,H=cr.height/3,R=150;varc=cr.getContext(“2d”);varG=360,g=0,T=Math.PI*2,t=T/G;c.save();c.translate(W,…

    2022年10月17日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号