ReadProcessMemory 在某些页面上失败 (GetLastError()=299)

2023-12-11

我尝试读取进程(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, baseOffs,buf,si.dwPageSize,&numByteWritten) == FALSE)
                OutputDebugString(TEXT("bad\n")); //GetLastError()==ERROR_PARTIALLY_READ; numByteWritten == 0;
            else
                OutputDebugString(TEXT("good\n"));

        }
    }

    delete[] buf;
}

我厌倦了查看 MEMORY_BASIC_INFORMATION 中的失败页面,但我没有发现任何奇怪的东西。此外,失败页面的数量因运行而异(平均约为 5 个)。是什么阻止我阅读这些页面?我需要调整进程令牌中的一些权限吗?


经过一点调试,发现了一些有趣的事情:所有失败的页面都有保护位PAGE_GUARD设置(参见MSDN doc)。当我解释这些文档时,您无法通过设计来阅读这些页面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")); 
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ReadProcessMemory 在某些页面上失败 (GetLastError()=299) 的相关文章

  • 当加载图标且 tk.mainloop 位于线程中时,Tkinter 会锁定 Python

    这是测试用例 import Tkinter as tk import thread from time import sleep if name main t tk Tk thread start new thread t mainloop
  • Windows 消息

    我需要发送带有自定义 ID 的自定义 Windows 消息 其他应用程序将侦听该消息 Windows 是否为内部消息保留任何预定义的消息 ID 范围 如 SQL Server 那样 内部消息最多为 50 000 The 文档 https m
  • C++ GetDIBits 不工作

    首先我加载图像 cool bmp 加载很好 然后我调用函数 getPixArray 但它失败了 case WM CREATE runs once on creation of window hBitmap HBITMAP LoadImage
  • Windows 批处理:如何添加主机条目?

    我想使用此批处理脚本通过使用自动将新条目添加到我的主机文件中windows questions tagged windows batch 不幸的是 剧本只需在主机文件中添加一行 当我以管理员身份运行脚本时 又出了什么问题 echo off
  • Windows 上的本机窄字符串编码是什么?

    Subversion API 有一个功能数量 http subversion apache org docs api latest svn utf 8h html用于从 本机编码 字符串转换为以 UTF 8 编码的字符串 我的问题是 Win
  • :: 右侧的非法标记

    我有以下模板声明 template
  • Windows.Automation 中的旧版 IAccessible

    如何使用C 获取AutomationElement的LegacyIAccessible State和其他LegacyIAccessibles 就像工具中的 Inspect exe 一样 The LegacyIAccessible是新的 并且
  • 如何防止文件重定向到 VirtualStore 来读/写文件?

    我正在使用 C 和 net 2 0 我将程序数据保存在以下文件中 C ProgramData MyProgramName fileName xml 安装并运行我的应用程序一次后 我将其卸载 在卸载过程中 我从 程序数据 中删除了所有文件 然
  • WaitForSingleObject 是否充当内存屏障?

    昨天一个关于双重检查锁定的问题引发了一系列的想法 让我对一个简单的情况感到不确定 在下面的代码中 是否可以点击printf 不再同步 在这个简单的示例中 这些值可能位于同一缓存行上 因此我认为这种可能性较小 假设一开始可能性 gt 0 如果
  • 低级挂钩/SetWindowsHookEx lParam 自动重复?

    在这里阅读 Windows PC 上如何实现键盘自动重复 https stackoverflow com questions 876852 how is keyboard auto repeat implemented on a windo
  • 如何在没有清单的情况下启用视觉样式

    根据docs http msdn microsoft com en us library bb773187 aspx 如果您希望应用程序使用 ComCtl32 dll 版本 6 则必须添加应用程序清单或编译器指令指定应使用版本 6 如果可用
  • 如何通过API退出Win32应用程序?

    我有一个使用 Win32 API 编写的 C Win32 应用程序 我希望强制它在其中一个函数中退出 有没有类似的东西Exit or Destroy or Abort 类似的东西会终止它吗 哎呀呀呀呀呀呀 不要做任何这些事情 exit 和
  • ListView 多选行为?

    Comtl32 dll v6 0中的ListView进行多项选择 使用Shift键时 如下 x表示选择 00xxxx xxxxxx xxxx00 早期版本的 ListView 的做法如下 00xx00 00xx00 00xx00 有没有办法
  • win32 API 和 .NET 框架之间的选择

    我必须开发一个适用于 Windows 的应用程序 该应用程序将能够通过网络摄像头识别手势来控制鼠标 我将使用 vc 2008 进行开发 但我很困惑是使用 NET 框架还是核心 win32 API 性能对于我的应用程序非常重要 根据 Ivor
  • 如何在 WINAPI 中获取 Windows 10 内部版本、修订号?

    我想使用 WINAPI 在 Windows 10 上获取构建版本 当前窗口版本 10 0 19042 685 我尝试使用 WMI 查询来获取它 select Version BuildNumber from Win32 OperatingS
  • 如何取消同步 WinHttp 请求?

    我的服务有一个线程可能正在执行WinHttpSendRequest当有人试图停止我的服务时 The WinHttpCloseHandle 文档 http msdn microsoft com en us library windows de
  • 使用 CreateRestrictedToken(LUA_TOKEN) 从提升的进程创建低/中进程

    我正在尝试从提升的进程创建中或低完整性进程 我知道还有其他类似的问题 但它们主要关注使用资源管理器或任务计划程序等解决方法 我想坚持使用CreateRestrictedToken CreateProcessAsUser 我认为一定可以以某种
  • 如何捕获正在播放的音频?

    有谁知道如何以编程方式捕获正在播放的声音 即来自声卡的所有声音 而不是麦克风等输入设备 假设您正在谈论 Windows 则基本上可以通过三种方法来实现此目的 首先是打开音频设备的主输出作为录音源 这只有在驱动程序支持时才可能实现 尽管现在大
  • C# - 如何将 IntPtr 缓冲区数据保存到文件(最快的方法)?

    我使用此代码将非托管代码中的 IntPtr 缓冲区中的字节保存到文件中 这是一个简单的回调函数 private void callback IntPtr buffer int length byte bytes new byte lengt
  • 具有自定义镶边的 WPF 窗口在右侧和底部有不需要的轮廓

    我使用 Microsoft Windows Shell dll 创建了带有自定义镶边的 WPF 窗口 这是代码

随机推荐

  • 嵌套相对定位的div需要有100%的高度

    我试图在这里获取嵌套的 div canvas 白色区域 http osf Fivetoolsoftware com填满 100 的空白空间 这是 HTML
  • 在服务器中创建文件后使用 jQuery 下载文件

    当我单击客户端上的按钮时 我想使用 AJAX 在服务器端调用公共静态 Web 方法 静态方法将创建适当的文件 创建文件后 我需要将其下载到客户端桌面 我找到了John Culvinar 的 jquery 文件下载插件但到目前为止还未能实施
  • 语句和关键字有什么区别?

    After calling return一份声明 这是在评论中向我提出的 return不是一个语句 它是开始 return 语句的关键字 有什么区别一份声明 and 开始语句的关键字 句子和句子开头的名词有什么区别 return是一个关键字
  • 在 Selenium for Python 中,如何获取元素的属性而不是属性?

    根据文档 获取属性实际上返回属性而不是属性 除非该属性不存在 在这种情况下它会回退到属性 获取属性将始终归还财产 有没有办法始终获取该属性 我觉得奇怪的是 名为 get attribute 的函数会优先考虑属性值而不是属性值 获取属性 属性
  • 如何使用 Tesseract API 迭代单词?

    我正在尝试与 Tesseract API 并行地学习 Python 我的最终目标是学习如何使用 Tesseract API 来读取文档并进行一些基本的错误检查 我发现了一些似乎是不错的起点的示例 但我无法理解两段代码之间的差异 尽管行为不同
  • 如何通过 Facebook API 发布包含多张照片的状态?

    我的 Facebook Graph API 有问题 有没有办法使用 Graph API Javascript SDK 在状态帖子中附加多张照片 使用 iOS Facebook 应用程序可以发布包含多张照片的状态 然而 在浏览了互联网上的文档
  • 您可以在加载的项目上创建 VC++ 解决方案集预处理器 #defines 吗?

    我有一个支持 define 的库来控制它的构建方式 然而 该库可以被需要不同版本的多个 EXE 项目使用 我可以让 app EXE 项目设置 define 在构建时由库使用 或者在解决方案中设置吗 我能想到的唯一其他选择是在库项目上创建一个
  • 结账 woocommerce wordpress 中简短描述的解决方案对我不起作用

    我已经使用了我在这里找到的 brasofilo 提供的解决方案结帐 woocommerce wordpress 中的简短描述 但由于某种原因 每个产品的每个描述后都会添加一个冒号 我用萤火虫试图找出它可能来自哪里 它显示在结帐页面上显示的每
  • 返回 Python CGI MySQL 脚本的输出

    我对 Python 和 MySQL 非常陌生 这是我的第一个 Stack 问题 所以 如果我遗漏了一些明显的东西 请提前道歉 但是 在提问之前我确实尝试过研究一下 我正在尝试学习 Python MySQL 和 CGI 脚本编写的基础知识 为
  • 从 k8s 入口动态添加/删除命名主机

    我正在 GKE 上设置 k8s 集群 通配符 DNS server com将指向入口控制器 在集群内部 将有网络服务器 Pod 每个 Pod 都公开一个独特的服务 Ingress 控制器将使用服务器名称来路由到各种服务 服务器几乎每天都会被
  • 当泄漏工具未显示内存泄漏时,如何调试内存泄漏?

    我有一个用 Swift 编写的 iOS 应用程序 该应用程序正在泄漏内存 在某些情况下 一些对象应该被释放 但它们没有 我通过简单地添加了解了这个问题deinit调试消息如下 deinit println DEINIT KeysProvid
  • 贪心算法无法完成 0-1 背包 p‌r‌o‌b‌l‌e‌m 的情况

    我正在寻找一种情况 其中选择重量 考虑容量为 4 的背包以及具有以下重量和价值的物品 Item Weight Value value Weight A 3 1 65 0 55 B 2 1 0 5 C 2 1 0 5 基于每权重价值的贪婪算法
  • 有没有办法在 Dart 中通过引用传递原始参数?

    我想通过引用传递一个原语 int bool 我在这里找到了关于它的讨论 通过引用传递值类型 段落 Dart 中的值类型 但我仍然想知道是否有办法在 Dart 中做到这一点 除了使用对象包装器 有什么发展吗 Dart 语言不支持这一点 我怀疑
  • 将 Service Broker 与 Sql Server Express 2008 结合使用

    是否可以在 sql Express 上使用外部激活而不通过 sql enterprise standard 我想向 sql Express 服务代理发送一条消息 然后让它通知在同一盒子上运行的外部应用程序服务 以便启动控制台应用程序来拾取消
  • 使用 jQuery.ajax 和 JSONP 设置标头?

    我正在尝试使用 jQuery 访问 google 文档 这是我到目前为止所拥有的 var token my auth token ajax url http docs google com feeds documents private f
  • 当 COM 事件发生时,如何更新自定义图形项(在 pyqtgraph 中)?

    我做了一个程序 实时接收原油期货的每笔交易信息 基本上 OnReceiveRealData当事务执行并调用时执行real get方法 在该方法中 收集当前时间 价格和数量数据并用它们制作字典 有更多方法可以从实时流数据中制作 OHLC 格式
  • 如何获取当前shell脚本的完整路径名?

    有没有更简单的方法来做到这一点 bin ksh THIS SCRIPT usr bin readlink f echo 0 bin sed s PWD echo THIS SCRIPT 我被困在使用ksh但更喜欢一个适用于的解决方案bash
  • 闹钟没有停止

    我试图停止警报并检查它是否停止 但它总是返回 true 意味着警报正在工作 我尝试根据链接中的答案停止警报https stackoverflow com a 17616299 1226882但这对我不起作用 请参考下面的代码 启动警报 pu
  • 为什么 Spark Mongo 连接器不下推过滤器?

    我有一个大型 Mongo 集合 想在我的 Spark 应用程序中使用 Spark Mongo 连接器 该集合相当大 gt 10 GB 并且包含每日数据 索引为original item CreatedDate场地 在 Mongo 中选择几天
  • ReadProcessMemory 在某些页面上失败 (GetLastError()=299)

    我尝试读取进程 Win7 64 的所有提交页面 在大多数页面上它可以工作 但在少数页面上会失败 我无法解释为什么 这是我的测试程序 x32编译 在Win7 64中测试 include