Проблемы компиляции Vista / 7 и выполнения XP / 2000 с OpenProcess в C ++ - PullRequest
0 голосов
/ 23 августа 2010

Я использую OpenProcess с правами PROCESS_ALL_ACCESS для следующих функций: -EnumProcessModules
-GetModuleFileNameEx
-ReadProcessMemory
-WriteProcessMemory
, который отлично работает в Windows Vista / 7.Однако в Windows XP / 2000 он не будет открывать процесс с помощью PROCESS_ALL_ACCESS, поскольку согласно библиотеке MSDN:


Размер флага PROCESS_ALL_ACCESS увеличился в Windows Server 2008 и Windows Vista.Если приложение, скомпилированное для 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 (приведенный выше пример не работает) и / или какие права процессабудет необходимо для этих функций.

Большое спасибо.

1 Ответ

2 голосов
/ 23 августа 2010

Найдите местоположение вашей директивы #include <windows.h> и сделайте так:

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