Processus en cours

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

Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
25
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és
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
25
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
Messages postés
625
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
25 novembre 2010

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...
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
25
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
Messages postés
625
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
25 novembre 2010

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...
Messages postés
625
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
25 novembre 2010

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...