Privileges et processus

violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 - 29 août 2006 à 13:25
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 - 9 sept. 2006 à 13:12
Violent Ken

Bonjour à tous, et désolé de créer un nouveau thread sur le même (ou à peu près) sujet, mais comme j'ai à nouveau accès en permance à Internet, je "remonte" ce topic ; je pourrais y répondre immédiatement.

Enfin bref, je cherchais en fait à obtenir diverses informations sur les processus qui tournaient sur mon PC. Dans mon programme, en utilisant les APIs OpenProcess, ProcessFirst, ProcessNext, CreateToolHelpSnapshot, GetModuleFileNames, EnumProcessModules, GetProcessTimes...etc, je suis censé récupérer toutes les informations possibles sur mes processus. Mais voilà, sur certains processus tout va bien, mais sur d'autres (alg.exe, crss.exe, certaines instances de svchost.exe) impossible de récupérer autres chose que le nom du processus (exemple:alg.exe) et son pid (exemple:1345). Il manque donc : path complet du fichier, infos sur la mémoire utilisée, infos sur la charge CPU...etc.
Le problème vient du fait que l'argument utilisé dans OpenProcess (Desire Access) ne cible pas tout les processus. J'ai utilisée PROCESS_VM_READ Or PROCESS_QUERY_INFORMATION=1040. On m'a déjà certifié que c'était la constante correcte. Problème, j'ai bien tout les droits d'admin (XP familiale SP2), mais impossible de récupérer ce que je désire. On m'a aiguillé sur le fait qu'il fallait donner les droits (privileges) nécessaires à mon application, ce que j'ai tenté de faire avec les APIs OpenProcessToken, AdjustTokenPrivileges...


Voici le code que j'ai utilisé. Il est probablement érroné (première fois que j'utilise ces APIs), mais il m'a donné des résultats (voir plus bas)


'je ne donne pas les valeurs des constantes utilisées ci dessous, elles sont déclarées ailleurs
Public Function OpenProcessWithPrivileges(ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
'ouvre un processus avec tout les privileges

Dim lhTokenHandle As Long, tLuid As LUID, tTokenPriv As TOKEN_PRIVILEGES, tTokenPrivNew As TOKEN_PRIVILEGES, lBufferNeeded As Long


'change les droits de cette application
OpenProcessToken GetCurrentProcess(), TOKEN_ALL_ACCESS, lhTokenHandle
LookupPrivilegeValue "", SE_DEBUG_NAME, tLuid
'détermine le nombre de privileges à changer
tTokenPriv.PrivilegeCount = 1
tTokenPriv.TheLuid = tLuid
tTokenPriv.Attributes = SE_PRIVILEGE_ENABLED
'autorise le privilege SE_DEBUG_NAME
AdjustTokenPrivileges lhTokenHandle, False, tTokenPriv, Len(tTokenPrivNew), tTokenPrivNew, lBufferNeeded


OpenProcessWithPrivileges = OpenProcess(PROCESS_ALL_ACCESS, bInheritHandle, dwProcId)
End Function


J'ai ensuite remplacé dans mon code OpenProcess par OpenProcessWithPrivileges. J'ai obtenu ce que je voulais, mais uniquement dans l'IDE de Visual Studio (lors de lexécution avec F5) : une fois compilé, çà ne fonctionne plus, je n'ai à nouveau plus les droits.
Après redémarrage, c'est maintenant taskmgr qui a tout les droits (réussi à killer crss, alg, svchost...) ? Comment cela se fait-il ??


Ce serait vraiment cool si vous pouviez me détailler comment REELLEMENT donner les droits à mon application, parce que les résultats que j'ai obtenus sont mauvais.
Merci d'avance, et déjà merci à PCPT et ShareVB pour leurs réponses sur mon premier topic.
@+

1 réponse

ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
9 sept. 2006 à 13:12
salut,

euh, pour moi, le processus est simple :
-> vérifier que ton compte appartient au groupe Administrateur : outils d'administration/gestion de l'ordinateur
-> utiliser AdjustTokenPrivileges une fois au début du programme...(voir mon code PEB par exemple...)
-> le reste du code s'exécute alors avec les privilèges SE_DEBUG...

et normalement ca doit marcher...du moins chez moi le code PEB marche en IDE et hors IDE

P.S. : si tu as killé csrss, tu as killé Windows... lol...

ShareVB
0
Rejoignez-nous