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")); }

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • java中将字符串分割转为List

    java中将字符串分割转为ListStringstr=”a,b,c,d”;String[]arr=str.split(“,”);List<String>list=Arrays.asList(str);

  • (转)淘淘商城系列——导入商品数据到索引库——dao层

    (转)淘淘商城系列——导入商品数据到索引库——dao层

  • 获取 Windows Phone 手机系统信息

    wpf:1161718192021222324252627282930…

    2021年12月20日
  • 多吃碱性食物 远离癌症

    多吃碱性食物 远离癌症

  • 力扣题库练习

    力扣题库练习1给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例:输入:nums=[2,7,11,15],target=9输出:[0,1]解释:因为nums[0]+nums[1]==9,返回[0,1]本人简单暴力解答:vartwoSum=function(nums,

  • 分析方法3—PEST

    分析方法3—PEST什么时候需要进行行业分析呢?当个人在对自己进行职业规划,思考选择哪个行业更好的时候;当公司需要对外部环境或者行业竞争对手有所了解,制定发展规划的时候;当面对重大问题,需要分析行业问题的时候。如何进行行业分析呢?就是用PEST分析方法。PEST分析方法是对公司发展宏观环境的分析,所以经常用于行业分析。通常是从政策、经济、社会和技术这四个方面来分析的.2.3.2如何使用行业分析方法?现在通过一个具体的例子来看下如何应用PEST分析方法。政策环境主要包括政府的政策、法律等。例如可以从这样几个问题

发表回复

您的电子邮箱地址不会被公开。

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