0

我一直在使用具有 PROCESS_ALL_ACCESS 权限的 OpenProcess 来执行以下功能: -EnumProcessModules
-GetModuleFileNameEx
-ReadProcessMemory
-WriteProcessMemory
在 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(上面的示例不起作用)和/或哪些进程权限来定义最小操作系统这些功能将需要。

非常感谢。

4

1 回答 1

2

找到你的#include <windows.h>指令的位置,让它看起来像这样:

#define _WIN32_WINNT 0x500   // Target Windows 2000
#include <windows.h>
于 2010-08-23T17:25:01.170 回答