IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

VC++ .NET Discussion :

ERROR_ACCESS_DENIED : OpenProcess et OpenProcessToken


Sujet :

VC++ .NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    15
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 15
    Par d�faut ERROR_ACCESS_DENIED : OpenProcess et OpenProcessToken
    Bonjour,

    Dans un programme que je developpe je souhaiterai pouvoir lire la memoire d'un autre processus, mais plusieurs fonctions me retourne des ERROR_ACCESS_DENIED.

    Tout d'abord, je recherche mon processus avec les fonctions Process32First et Process32Next. Je trouve le processus dont je veux lire la memoire. Mais on me dit que je n'ai pas les droits d'acces quand j'execute le code suivant:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    HANDLE		hProcess = OpenProcess(PROCESS_ALL_ACCESS, true, pe32.th32ProcessID);
    En revanche si a la place de PROCESS_ALL_ACCESS, j'indique PROCESS_TERMINATE la fonction reussit et me retourne un handle. Par contre l'execution du code suivant me retourne la meme erreur, a savoir ERROR_ACCESS_DENIED.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);
    Je ne comprends pas pourquoi il me retourne cette erreurs. Je developpe sous Visual Studio 2008 avec Windows XP SP3. Mon compte appartient au groupe administrateur.

    J'ai essayer de trouver des informations sur le net, mais ca n'a rien donner. Notamment certains sites parle du groupe utilisateur 'Debugger Users group', d'autres sites disent que ce n'est plus en vigueur.

    Quelqu'un peut il m'aider ?

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    15
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 15
    Par d�faut
    La suite de l'histoire...

    J'arrive maintenant a utiliser OpenProcess sans erreur en utilisant le flag PROCESS_QUERY_INFORMATION. Ensuite j'arrive a appeler OpenProcessToken, LookupPrivilegeValue et AdjustTokenPrivileges sans erreur. Par contre je n'arrive pas a lire dans la memoire du processus. Je ne sais pas vraiment comment ca marche, s'il faut utiliser le token de OpenProcessToken, ou reouvrir un handle avec le flag PROCESS_ALL_ACCESS. Tout les tentatives que je fait avec la fonction ReadProcessMemory echoue. Donc c'est soit le code suivant qui est faut, soi je m'y prend pas bien. Quelqu'un a une idee ?

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    HANDLE		hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, true, pe32.th32ProcessID);
     
    std::cout << std::setw(30) << std::left << "  Handle";
    if (hProcess)
    	std::cout << "0x" << std::setbase(16) << hProcess << std::endl;
    else
    {
    	std::cout << "INVALID_HANDLE_VALUE" << GetLastError() << std::endl;
    	CloseHandle(hProcessSnap);
    	return ;
    }
     
    // Set
    HANDLE		hToken = 0;
     
    std::cout << std::setw(30) << std::left << "  Process Token";
    if (OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken) == 0)
    {
    	std::cout << "Error " << GetLastError() << std::endl;
    }
    else
    {
    	std::cout << "Success - " << hToken << std::endl;
    }
     
    // Look Privilege
    LUID		luid;
     
    std::cout << std::setw(30) << std::left << "  LookupPrivilegeValue";
    if (LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid) == 0)
    {
    	std::cout << "Error " << GetLastError() << std::endl;
    }
    else
    {
    	std::cout << "Success - " << std::endl;
    }
     
    // Enable the privilege
    TOKEN_PRIVILEGES	tp;
     
    tp.PrivilegeCount = 1;
    tp.Privileges[0].Luid = luid;
    tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    std::cout << std::setw(30) << std::left << "  AdjustTokenPrivileges";
    if (AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), (PTOKEN_PRIVILEGES) NULL, (PDWORD) NULL) == 0)
    {
    	std::cout << "Error " << GetLastError() << std::endl;
    }
    else
    {
    	std::cout << "Success - " << hToken << std::endl;
     
    	if (GetLastError() == ERROR_NOT_ALL_ASSIGNED)
    		std::cout << "The token does not have the specified privilege." << std::endl;
    }
    CloseHandle(hToken);
    J'obtient la sortie suivante:
    Process ID 1980
    Thread count 17
    Parent process ID 1940
    Handle 0x00000FC4
    Process Token Success - 00000FC0
    LookupPrivilegeValue Success -
    AdjustTokenPrivileges Success - 00000FC0

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    15
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 15
    Par d�faut
    Bon j'ai trouve la solution tout seul . En faite mon probleme venais du faite que j'essayai de faire le SE_DEBUG_NAME sur le process dont je voulais lire la memoire. En faite il faut le faire sur soi meme, c'est a dire le process appellant. Ensuite on peut faire un OpenProcess avec le flag PROCESS_ALL_ACCESS sans probleme.

    Un petit lien pour voir un code complet qui marche:
    http://www.volynkin.com/debug.htm

    Voila...

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Probleme de HANDLE sur OpenProcess
    Par chuko dans le forum C
    R�ponses: 2
    Dernier message: 14/10/2008, 12h50
  2. Probleme API OpenProcess
    Par chuko dans le forum C
    R�ponses: 3
    Dernier message: 28/09/2008, 14h48
  3. OpenProcess Lib "kernel32"
    Par laftah71 dans le forum VB 6 et ant�rieur
    R�ponses: 3
    Dernier message: 04/01/2008, 11h22
  4. Prob avec OpenProcess
    Par alainpeniche dans le forum Windows
    R�ponses: 0
    Dernier message: 16/09/2007, 17h47
  5. OpenProcess renvoie Invalid Process Handle
    Par ktsys dans le forum C++
    R�ponses: 2
    Dernier message: 31/07/2007, 12h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo