Проблемы компиляции Vista/7 и выполнения XP/2000 с OpenProcess в C++
Я использую 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 ответ
Найдите местоположение вашего #include <windows.h>
и сделайте так, чтобы это выглядело так:
#define _WIN32_WINNT 0x500 // Target Windows 2000
#include <windows.h>