Vista/7 编译和 XP/2000 在 C++ 中使用 OpenProcess 执行问题;

发布于 2024-09-15 19:31:00 字数 722 浏览 7 评论 0原文

我一直在使用具有 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

忆悲凉 2024-09-22 19:31:00

找到 #include 指令的位置并使其如下所示:

#define _WIN32_WINNT 0x500   // Target Windows 2000
#include <windows.h>

Find the location of your #include <windows.h> directive and make it look like this:

#define _WIN32_WINNT 0x500   // Target Windows 2000
#include <windows.h>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文