draluorg
Messages postés625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 novembre 2010
-
8 sept. 2006 à 23:29
draluorg
Messages postés625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 novembre 2010
-
11 sept. 2006 à 12:54
Salut a tous,
Voila j'ai voulu code un IsProcessRunning et j'ai des resultats bizare :-/
Soit j'ai pres de 100 processus masque soit ma fonction est mauvaise lol (ce dont je ne doute pas)
Ce que je ne comprends pas c'est pourquoi ou est l'erreur ?
J'utilise OpenProcess qui renvoi zero si le process n'a pu etre ouvert...
Alors soit je suis trop fatigue ce soir soit je suis trop nul mais je pige pas...
Voici mon code:
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Const PROCESS_QUERY_INFORMATION = &H400
Private Const STILL_ACTIVE = &H103
Public Function IsProcessRunning(ByVal Pid As Long) As Boolean
Dim hProcess As Long
Dim lngExit As Long
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, 0&, Pid)
If hProcess = 0 Then Exit Function
GetExitCodeProcess hProcess, lngExit
CloseHandle hProcess If lngExit STILL_ACTIVE Then IsProcessRunning True
End Function
Bon je sais qu'il y a d'autres moyens de savoir si un processus est en cours, mais je voulais juste comprendre ce qui cloche...
Merci d'avance pour vos suggestions
++
Quand on pose une question on est con 5 minutes,
Quand on ne la pose pas on le reste toute sa vie...
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 201626 11 sept. 2006 à 11:01
salut,
après étude rapide des PID (et en sachant que c'est aussi valable pour les handles), on peut affirmer que les PID comme les handles sont numérotés par pas de 4 ce qui fait qu'un process à 4 PID...et en fait c'est logique car un PID comme un handle est l"index dans la table système des processus (respectivement des handles de chaque processus) et ces tables contiennent des pointeurs vers les process block (respectivement les kernels objets ) des processus (respectivement des handles)...
de plus, il semblerait que les Threads soient numérotés dans le même domaine que les process ID donc PID et TID mélangés...
le problème de ta méthode est quelle donnera 4 fois plus de processus et sûrement 8 fois plus de process sur 64bits...
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 201626 9 sept. 2006 à 12:53
salut,
pour certain process, il faut EnableTokenPrivilege SE_DEBUG pour pouvoir faire un OpenProcess (quelque soit le flag)...regarde par exemple, ma source PEB pour les privilèges process...
sinon moi je verrais plutôt ta source avec CreateToolHelp...ce qui permet de se passer de privilèges...enfin je crois...
draluorg
Messages postés625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 novembre 2010 10 sept. 2006 à 13:22
Salut,
Eh OpenProcess me renvoyait par exemple 1004 pour pid 4, pid 5, pid 6 et pid 7
J'avais pas lu ta phrase me conseillant TooHelp, tu veux dire lister le snapshot et verifier si le pid s'y trouve ? C'est ce que je faisais avant, mais c'est un peu long et vu que c'est pour un affichage "temps reel" des process, j'essai de grapiller un max...
Peut etre que certain process ont une plage de pid reservee qui renvoi vers le meme process, possible ? car en fait ca me le fait avec System et Lsass et je sais plus les autres...
++
Quand on pose une question on est con 5 minutes,
Quand on ne la pose pas on le reste toute sa vie...
draluorg
Messages postés625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 novembre 2010 11 sept. 2006 à 12:54
Salut,
Ok merci beaucoup, en effet c'est logique (quand on le sait lol)
Ici le but est de verifier qu'un Pid optenu que;ques secondes plutot est toujours en cours, donc ca ne pose pas de problemes...
Encore merci pour ces informations
++
Quand on pose une question on est con 5 minutes,
Quand on ne la pose pas on le reste toute sa vie...