Vista/7 编译和 XP/2000 在 C++ 中使用 OpenProcess 执行问题;
我一直在使用具有 PROCESS_ALL_ACCESS 权限的 OpenProcess 来执行以下功能: -EnumProcessModules
-GetModuleFileNameEx
-读取进程内存
-写入进程内存
在 Windows Vista/7 上运行良好。但是,在 Windows XP/2000 中,它不会使用 PROCESS_ALL_ACCESS 打开进程,因为根据 MSDN 库:
Windows Server 2008 和 Windows Vista 上 PROCESS_ALL_ACCESS 标志的大小增加了。如果为 Windows Server 2008 和 Windows Vista 编译的应用程序在 Windows Server 2003 或 Windows XP/2000 上运行,则 PROCESS_ALL_ACCESS 标志太大,并且指定此标志的函数将失败并显示 ERROR_ACCESS_DENIED。要避免此问题,请指定操作所需的最小访问权限集。如果必须使用 PROCESS_ALL_ACCESS,请将 _WIN32_WINNT 设置为应用程序所针对的最低操作系统(例如,#define _WIN32_WINNT _WIN32_WINNT_WINXP)
我不熟悉使用 #define 设置最低操作系统。在尝试了上面列出的功能的几种替代访问权限组合后,都没有运气,我问是否有人可以向我展示如何使用 #define 定义最小操作系统(上面的示例不起作用)和/或哪些进程权限这些功能将需要。
非常感谢。
I've been using OpenProcess with PROCESS_ALL_ACCESS rights for the following functions:
-EnumProcessModules
-GetModuleFileNameEx
-ReadProcessMemory
-WriteProcessMemory
which works fine on Windows Vista/7. However, in Windows XP/2000, it won't open the process with PROCESS_ALL_ACCESS because according to the MSDN library:
The size of the PROCESS_ALL_ACCESS flag increased on Windows Server 2008 and Windows Vista. If an application compiled for Windows Server 2008 and Windows Vista is run on Windows Server 2003 or Windows XP/2000, the PROCESS_ALL_ACCESS flag is too large and the function specifying this flag fails with ERROR_ACCESS_DENIED. To avoid this problem, specify the minimum set of access rights required for the operation. If PROCESS_ALL_ACCESS must be used, set _WIN32_WINNT to the minimum operating system targeted by your application (for example, #define _WIN32_WINNT _WIN32_WINNT_WINXP)
I'm not familiar with using #define to set the minimum operating system. After trying several combinations of alternative access rights for the functions listed above, all without luck, I ask if someone may show me how to define the minimum operating system using #define (the above example didn't work) and/or which process rights would be needed for those functions.
Many thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
找到
#include
指令的位置并使其如下所示:Find the location of your
#include <windows.h>
directive and make it look like this: