violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 2010
-
17 août 2006 à 14:56
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 2010
-
29 août 2006 à 16:16
Violent Ken
Bonjour, je cherche à récupérer des informations sur les processus lancés. J'utilise donc les API Openprocess, EnumProcessModules, GetModulesFileName...
Mais si je peux lister tout les processus actifs, je ne peux récupérer certaines informations de certains processus ; le problème est dû au paramètre numéro 1 de l'API openprocess : j'utilise la constante PROCESS_QUERY_INFORMATION or PROCESS_WM_READ
(Const PROCESS_QUERY_INFORMATION = &h400
Const PROCESS_VM_READ = 16)
Le problème est que je n'ai pas accès à certains processus, comme alg.exe ou certains svchost.exe
La constante PROCESS_ALL_ACCESS ne fonctionne pas non plus, quelle valeur dois-je donner à l'argument de OpenProcess pour pouvoir accéder à tout les processus ?
Merci.
PS: je sais que l'on peut utiliser WMI pour faire la même chose, mais je préfère utiliser des API moins gourmandes en ressources dans mon cas.
PPS : j'ai déjà recherché dans les nombreuses sources existantes, et je n'ai rien trouvé.
Private Declare Function OpenProcessToken Lib "advapi32" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
'ajuste les privilèges
Private Declare Function AdjustTokenPrivileges Lib "advapi32" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long
'regarde la valeur du privilèges
Private Declare Function LookupPrivilegeValue Lib "advapi32" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long
'renvoie le handle du processus appelant (-1)
Private Declare Function GetCurrentProcess Lib "kernel32.dll" () As Long
'fermer un handle
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
'autorise le privilège SeDebugPrivilege
Public Sub EnableDebug()
Dim hProc As Long 'handle du processus actuel
Dim hToken As Long 'handle du token
Dim mLUID As LUID 'LUID du privilège
Dim mPriv As TOKEN_PRIVILEGES 'privilèges
Dim mNewPriv As TOKEN_PRIVILEGES 'nouveaux privilèges
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 22 août 2006 à 11:31
Violent Ken
Salut, et désolé de répondre si tardivement, mais je n'ai accès à Internet que (très) périodiquement en ce moment...
Concernant la source de VBShare, je suis en effet passé dessus. L'argument employé, PROCESS_DUP_HANDLE, ne convient pas non plus (utilisé pour la gestion des handles du process, et pas pour récupérer les infos du process)
Et après réflexion, j'ai essayé tout les arguments rendus possible par le type de variable attendu (j'ai donc fait une boucle incrémentant la valeur de l'argument), et je ne trouve aucune valeur permettant de trouver les infos sur les 2-3 processus manquants. D'ailleurs, toutes les sources présentées sur ce site concernant la récupération d'informations sur les processus par la méthode APIs (openprocess, getmodulefilename...) oublient à chaque fois les mêmes processus. Et d'ailleurs, le gestionnaire de processus de Windows, contenu dans l'executable helpctr.exe (infos systèmes, dans environnement logiciel\taches en cours) a les mêmes absences !
Donc soit l'API ne permet vraiment pas de récupérer les infos souhaitées, soit j'ai un problème spécifique à ma machine (j'ai pourtant les droits d'admin).
Problème entier, donc ? Je vais me rabattre sur WMI pour les processus concernés, mais la méthode est moins intéressante (WMI installé/activé nécessaire et moins rapide)
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 201626 23 août 2006 à 21:05
salut,
faut voir du côté des jetons de privilèges et le privilège de déboguage nécessaire pour ouvrir n'importe quel process...EnableTokenPrivilege et SE_DEBUG_NAME...
il se peut qu'il soit par défaut sur certaines versions de Windows ou si la config de sécurité l'active (je ne sais pas bien si c'est possible)...
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 28 août 2006 à 20:32
Violent Ken
Désolé de répondre à nouveau si tardivement... mais maintenant j'ai de nouveau accès à Internet de façon permanente.
PCPT ==> Non, je ne parle pas de taskmgr (qui lui, comporte tout les processus), mais de helpctr.exe (puis infos systèmes, environnement logiciel\taches en cours).
Mon OS: XP Edition Familiale SP2, avec les droits d'administrateur. Je n'ai pas (encore) eu l'occasion de compiler sur un autre poste.
ShareVB ==> J'avais en effet crû comprendre (après coup, après mon dernier post) que c'était une histoire de privileges. Mais je n'ai pas réussi à changer quoi que ce soit.
Il faut que je me re-documente sur les APIs AdjustTokenPriviliges et OpenProcessToken maintenant que j'ai à nouveau Internet !
Merci encore, je vous tiens au courant si j'y parviens
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 29 août 2006 à 16:16
Violent Ken
Je ne comprend plus.... J'ai créé un nouveau programme, avec uniquement comme fonction de récupérer le path entier des processus en fonction de leur PID...
Résultat sans appel, ta fonction marche parfaitement.
J'ai donc un programme compilé qui marche avec ta fonction, et un autre programme qui ne marche que dans l'IDE Visual Studio...