2010-08-23 2 views
0

Je l'ai utilisé OpenProcess des droits de PROCESS_ALL_ACCESS pour les fonctions suivantes: -EnumProcessModules
-GetModuleFileNameEx
-ReadProcessMemory
-WriteProcessMemory
qui fonctionne bien sur Windows Vista/7. Cependant, sous Windows XP/2000, il ne sera pas ouvrir le processus avec PROCESS_ALL_ACCESS car selon la bibliothèque MSDN:Vista/7 et XP Compile/2000 problèmes d'exécution avec OpenProcess en C++


La taille du drapeau PROCESS_ALL_ACCESS augmenté sur Windows Server 2008 et Windows Vista. Si une application compilée pour Windows Server 2008 et Windows Vista est exécutée sur Windows Server 2003 ou Windows XP/2000, l'indicateur PROCESS_ALL_ACCESS est trop grand et la fonction spécifiant cet indicateur échoue avec ERROR_ACCESS_DENIED. Pour éviter ce problème, spécifiez l'ensemble minimal de droits d'accès requis pour l'opération. Si PROCESS_ALL_ACCESS doit être utilisé, mis _WIN32_WINNT au système d'exploitation minimal ciblé par votre application (par exemple, #define _WIN32_WINNT _WIN32_WINNT_WINXP)

Je ne suis pas familier avec l'utilisation #define pour régler le système d'exploitation minimal. Après avoir essayé plusieurs combinaisons de droits d'accès alternatifs pour les fonctions listées ci-dessus, toutes sans chance, je demande si quelqu'un peut me montrer comment définir le système d'exploitation minimum en utilisant #define (l'exemple ci-dessus n'a pas fonctionné) et/ou quels droits de processus serait nécessaire pour ces fonctions.

Merci beaucoup.

Répondre

1

Trouvez l'emplacement de votre directive #include <windows.h> et la faire ressembler à ceci:

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