Processus en cours

Résolu
draluorg Messages postés 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 novembre 2010 - 8 sept. 2006 à 23:29
draluorg Messages postés 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 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...

6 réponses

ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
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
3
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
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...

ShareVB
0
draluorg Messages postés 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 novembre 2010
9 sept. 2006 à 13:50
Salut ShareVb,

Merci pour ta reponse, mais j'ai bien le SeDebugPriv... :-/

++

Quand on pose une question on est con 5 minutes,
Quand on ne la pose pas on le reste toute sa vie...
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
10 sept. 2006 à 10:36
salut,

pour les dits processus masqués, c'est OpenProcess qui renvoie 0 ou GetExitCodeProcess qui donne un status de sortie de 0 ou autre...

peux tu donner un exemple de process masqué ?

ShareVB
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
draluorg Messages postés 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 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...
0
draluorg Messages postés 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 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...
0
Rejoignez-nous