Проблемы компиляции 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>
Другие вопросы по тегам