[C/WIN32] CTRLALTDEL : UN GESTIONNAIRE DE PROCESSUS.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 2010
-
3 juin 2006 à 17:55
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 2016
-
30 mars 2008 à 13:03
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 30 mars 2008 à 13:03
HeavenForsaker , maintenant je crois que tu as ta solution :D pour ma par je modifierai bien mon code en suivant la méthode de celui de brunews, mais je ne suis pas à ça pour le moment. Je le ferais quand j'aurai le temps :D mais je note
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 29 mars 2008 à 18:38
Je vais mettre une "V2" de mon code 17658 en x64, j'ai viré Vista32 pour Server 2008 x64 mais ça liste bien en version 32.
HeavenForsaker
Messages postés223Date d'inscriptionmercredi 13 juillet 2005StatutMembreDernière intervention 8 août 2011 28 mars 2008 à 19:23
re,
J'ajoute que la fonction CreateToolhelp32Snapshot échoue aussi sur ce processus :
haModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessId);
Toujours avec access denied.
HeavenForsaker
Messages postés223Date d'inscriptionmercredi 13 juillet 2005StatutMembreDernière intervention 8 août 2011 28 mars 2008 à 17:53
Bonjour,
Sous Vista ton prog n'arrive pas a lister le path du processus audiodg.exe (Isolation graphique de périphérique audio Windows), le programme est exécuté en "run as administrator".
OpenProcess échoue sur ce processus :
haProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,FALSE,stProcess.th32ProcessID);
GetLastError() renvoi 5 (access denied)
Je pensais qu'avec le privilège debug on était à l'abris de ça mais visiblement ça n'est pas le cas, as tu une solution ?
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 3 mars 2008 à 21:17
Yop,
Neo et Thez, merci je vai corrigé cela sous peu.
cs_Thez
Messages postés21Date d'inscriptionmardi 15 juillet 2003StatutMembreDernière intervention12 mars 2009 3 mars 2008 à 10:05
Bonjour,
Je voudrais te signaler qu'il y a une fuite mémoire dans GetUserProcess():
- si cela se passe mal, tu fais bien un CloseHandle, mais tu ne
désalloue pas la mémoire !
Je te propose de repousser tes allocations au plus tard. Ainsi tu n'as pas besoin de désallouer dans tous les cas où tu retournes FALSE.
En tout cas, très bon code.
Bonne continuation
cs_NeoUmbrella
Messages postés104Date d'inscriptionvendredi 5 novembre 2004StatutMembreDernière intervention11 septembre 2008 10 févr. 2008 à 11:51
Salut, intéressant comme code source.
Je me trompe peut-etre mais je crois que tu oublies de nettoyer dans tes fonctions LoadProcess et StopProcess ( au cas ou le processus ne serait pas trouvé ).
Faudrait faire un CloseHandle sur haSnapShot.
Sinon merci pour ce code source.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 14 déc. 2007 à 09:58
Il est clair que:
if(debutant || userApiExist) userApiUtiliser();
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 14 déc. 2007 à 08:54
Yop,
ZwQuerySystemInformation n'est pas une fonction du DDK ? tu m'avais dit que ce n'était pas très bon de jouer avec des fonctions du DDK dans une application normale.
Sinon pour les threads, c'est vrai que ce n'est pas une mauvaise idée. Je le rajouterai quand j'aurais le temps.
shuttleur
Messages postés33Date d'inscriptionmercredi 12 septembre 2007StatutMembreDernière intervention30 juin 2008 13 déc. 2007 à 16:08
Merci !
J'avais entre-temps essayé avec :
HANDLE hSnapshot = (HANDLE) CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
et
Process32Next(hSnapshot, &uProcess);
mais bizarrement, uProcess.cntThreads me renvoit un nombre différent de celui du taskmng de windows, et surtout constant dans le temps alors que le nombre de threads changeait dans le gestionnaire de taches de windows..
Je me lance avec ZwQuerySystemInformation
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 13 déc. 2007 à 15:16
ZwQuerySystemInformation()
avec SystemProcessesAndThreadsInformation
shuttleur
Messages postés33Date d'inscriptionmercredi 12 septembre 2007StatutMembreDernière intervention30 juin 2008 13 déc. 2007 à 14:56
Salut à tous,
Je scrupte depuis hier les sources de simili-Gestionnaires de Taches, mais je n'arrive pas à trouver comment je peux connaître le nombre de threads d'un processus.
Sauriez vous comment faire ?
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 30 juin 2006 à 16:43
Merci . C'est normale car il n'est pas fait :D lol
cs_eRoZion
Messages postés241Date d'inscriptionvendredi 23 mai 2003StatutMembreDernière intervention 8 octobre 20071 30 juin 2006 à 01:07
Salut,
Ta source est super intéressante. Je te remercie.
Une note : chez moi le tri des colones ne foncionne pas (si on entend par là le fait qu'en cliquant sur la colone de la mémoire par exemple ça se reclasse par ordre croissant).
Je suivrai l'évolution ;)
eRoZion
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 23 juin 2006 à 11:41
Il n'y a que "system" qui n'en à pas , je n'en connai la raison. pource qui est de \?? je ne sais pas non plus. Je ne sais pas l'expliquer.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 22 juin 2006 à 21:25
C'est marrant certains processus on comme chemin \??\C:\, ou \SystemRoot
D'autres processus n'ont pas de chemin du tout :)
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 20 juin 2006 à 19:43
CloseHandle suffit, c'est juste pour dire au système de libérer cette place dans la table des handles mais ce n'est pas de la la "mémoire" à libérer.
Si haProcess == NULL bien entendu que pas de CloseHandle.
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 20 juin 2006 à 14:44
Ok BruNews , je modifie et je met à jour. Une question cependant, au risque de paraître idio, comment libéré la mémoire allouée pour le handle? car je ne sais qu'elle fonction ou autre à été employée.
Merci pour l'encouragement :D
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 20 juin 2006 à 02:22
InitCommonControls(); ne doit pas être appelé à chaque event de ta windProc, place le juste avant le CreateWindowEx dans le WinMain, sera impec à cet endroit.
if(haProcess == NULL){CloseHandle(haProcess); return FALSE;}
On ne ferme pas un handle invalide mais par contre il faut libérer la mémoire allouée plus haut.
Vérifie tous les cas de sortie de cette fonction, il ne faut rien oublier, c'est le cas typique ou qlq 'goto' judicieux ne gache rien à l'affaire.
Bon travail, continue ainsi.
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 14 juin 2006 à 20:11
ha oui, bon à savoir ça merci vecchio et brunews.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 14 juin 2006 à 20:08
Ben non, c'est dans les headers (commctrl.h ici)
Mais celui de MinGW est en carton
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 14 juin 2006 à 20:07
hey ça marche avec 0x1000+54, intéressant, et comme on fait pour savoir à quoi correspond la constante? c'est dans la lib???
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 14 juin 2006 à 20:05
mdr je vai tester avec 0x1000+54 :D
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 14 juin 2006 à 20:05
tu vas me tué hein ? si je te dit que LVM_SETEXTENDEDLISTVIEWSTYLE et bien il met qu'il n'est pas connu :s aiieeeee nooooon . Donc tjrs le même problème.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 14 juin 2006 à 20:03
Autant le dire de suite, LVM_SETEXTENDEDLISTVIEWSTYLE=0x1000+54
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 14 juin 2006 à 20:01
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 14 juin 2006 à 20:01
pas besoin:
SendMessage(hlv, LVM_SETEXTENDEDLISTVIEWSTYLE, 0x20, 0x20);
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 14 juin 2006 à 19:58
Lol ça progress, maintenant c'est la fonction SetExtendedListViewStyleEx() qui n'est pas connue, je commence à croire que j'ai pas la bonne version de la dll.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 14 juin 2006 à 19:54
0x20 au lieu de la contante
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 14 juin 2006 à 19:48
Ho tien voila BruNews, oui ... ce serai une solution :D . Met il n'est installable que via le net et le pc ou je programme n'y est pas raccordé, j'ai bien des cd avec des versions express mais pas VC++ :s , donc voila. Mais sinon , il doit y avoir moyen mm avec dev-cpp de pouvoir appliqués les styles étendu hein :D allons mdr.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 14 juin 2006 à 19:42
Installe VC++ Express 2005 + le SDK et finies les emmerdes des machins rustiques.
Pour faire du code Win, les produits MS me semblent les mieux adaptés.
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 14 juin 2006 à 19:34
oui cela aussi je l'ai fait, cela ne change absolument rien :s
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 14 juin 2006 à 19:31
Tu mets ca au début de ton programme:
#define _WIN32_WINNT 0x501
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 14 juin 2006 à 19:22
Oui vecchio j'ai déjà esseyer mais il me dit que LVS_EX_FULLROWSELECT est introuvable, lol je suis plutot impuisant face à ce problème. (je met a jours ma source de suite pour la correction du bug).
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 14 juin 2006 à 19:17
Voila le problème règlé en ce qui concerne les processus à plusieur noms, je me demande d'ailleur pourquoi je n'ai pas fait comme cela directement :s . Merci vecchio de te soucié de mon prog mdr.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 14 juin 2006 à 19:10
Les styles étendus sont a ajouter après la création:
ListView_SetExtendedListViewStyleEx(hListView, 0, LVS_EX_FULLROWSELECT);
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 14 juin 2006 à 19:08
xp pro SP2 , désolé pour l'étourderie :D
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 14 juin 2006 à 19:07
vecchio , oui je sais, mais je n'y arrive pas, j'ai pourtant la bonne version de Comctl32.dll, enfin je pense vu que je suis sous win pro SP2. Ok merci pour la remarque, je vais plutot faire la recherche par les ID que les noms.
Pour ce qui est des noms, la méthode donnée est bonne, mais limitée, car on récupère les proprités de sécurité grâce au chemin de l'exe, hors il y en a certain qui n'en on pas :s et donc la je suis bloqué.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 14 juin 2006 à 18:14
Ah, et puis petite remarque, il y a un problème quand plusieurs processus ont le même nom d'exécutable. Stop ne termine pas forcément le bon
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 14 juin 2006 à 18:08
Une ListView avec LVS_EX_FULLROWSELECT serait plus pratique a utiliser
A ce que je vois tu n'a pas réussi a trouver le nom d'utilisateur qui a lancé le processus.
Tu devrais peut être retenter le coup dans le forum maintenant que BruNews est la...
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 6 juin 2006 à 20:21
héhé vecchio je verai après mais exams mdr. mais je le ferai.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 6 juin 2006 à 18:51
Eh ben, on peut toujours pas trier les colonnes?
Tu devrais essayer de la faire
militaire75
Messages postés2Date d'inscriptionsamedi 10 avril 2004StatutMembreDernière intervention 3 juin 2006 3 juin 2006 à 20:42
C'est très bien et pratique. Juste un détails, dans la fonction LoadProcess, la taille de szBuffer est un peu petite, ça me faisait planter le programme, j'ai mis 64 à la place de 20
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 3 juin 2006 à 18:08
Non effectivement moi j'utilise ToolHelp lui ... ben lui il va a la source, il recode tout :D Dans quelque année l'OS Brudows sortira mdr.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 3 juin 2006 à 18:05
Ya pas de problème, c'était jsute pour signaler aux personnes intéressées par le sujet qu'il y avait d'autres trucs sur le sujet
Ta méthode n'est pas la même que celle de BruNews de toute facons
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 3 juin 2006 à 18:02
ha désoler j'avai pas vu. J'avai fait une recherche avant et j'était bien tomber sur une source en rapport mais c'était stoper un processus et en mode console en plus. Etant donné que tu es admin il ne tien qu'à toi de supprimé ma source. Mais p-e (surement) que cette source est plus facile à comprendre que celle de BruNews qui s'adresse à des gens qui comprennent l'asm mdr. Enfin voila, a toi de juger.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 3 juin 2006 à 17:55
30 mars 2008 à 13:03
29 mars 2008 à 18:38
28 mars 2008 à 19:23
J'ajoute que la fonction CreateToolhelp32Snapshot échoue aussi sur ce processus :
haModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessId);
Toujours avec access denied.
28 mars 2008 à 17:53
Sous Vista ton prog n'arrive pas a lister le path du processus audiodg.exe (Isolation graphique de périphérique audio Windows), le programme est exécuté en "run as administrator".
OpenProcess échoue sur ce processus :
haProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,FALSE,stProcess.th32ProcessID);
GetLastError() renvoi 5 (access denied)
Je pensais qu'avec le privilège debug on était à l'abris de ça mais visiblement ça n'est pas le cas, as tu une solution ?
3 mars 2008 à 21:17
Neo et Thez, merci je vai corrigé cela sous peu.
3 mars 2008 à 10:05
Je voudrais te signaler qu'il y a une fuite mémoire dans GetUserProcess():
- si cela se passe mal, tu fais bien un CloseHandle, mais tu ne
désalloue pas la mémoire !
Je te propose de repousser tes allocations au plus tard. Ainsi tu n'as pas besoin de désallouer dans tous les cas où tu retournes FALSE.
En tout cas, très bon code.
Bonne continuation
10 févr. 2008 à 11:51
Je me trompe peut-etre mais je crois que tu oublies de nettoyer dans tes fonctions LoadProcess et StopProcess ( au cas ou le processus ne serait pas trouvé ).
Faudrait faire un CloseHandle sur haSnapShot.
Sinon merci pour ce code source.
14 déc. 2007 à 09:58
if(debutant || userApiExist) userApiUtiliser();
14 déc. 2007 à 08:54
ZwQuerySystemInformation n'est pas une fonction du DDK ? tu m'avais dit que ce n'était pas très bon de jouer avec des fonctions du DDK dans une application normale.
Sinon pour les threads, c'est vrai que ce n'est pas une mauvaise idée. Je le rajouterai quand j'aurais le temps.
13 déc. 2007 à 16:08
J'avais entre-temps essayé avec :
HANDLE hSnapshot = (HANDLE) CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
et
Process32Next(hSnapshot, &uProcess);
mais bizarrement, uProcess.cntThreads me renvoit un nombre différent de celui du taskmng de windows, et surtout constant dans le temps alors que le nombre de threads changeait dans le gestionnaire de taches de windows..
Je me lance avec ZwQuerySystemInformation
13 déc. 2007 à 15:16
avec SystemProcessesAndThreadsInformation
exemple d'utilisation ici:
http://www.cppfrance.com/code.aspx?id=17658
13 déc. 2007 à 14:56
Je scrupte depuis hier les sources de simili-Gestionnaires de Taches, mais je n'arrive pas à trouver comment je peux connaître le nombre de threads d'un processus.
Sauriez vous comment faire ?
30 juin 2006 à 16:43
30 juin 2006 à 01:07
Ta source est super intéressante. Je te remercie.
Une note : chez moi le tri des colones ne foncionne pas (si on entend par là le fait qu'en cliquant sur la colone de la mémoire par exemple ça se reclasse par ordre croissant).
Je suivrai l'évolution ;)
eRoZion
23 juin 2006 à 11:41
22 juin 2006 à 21:25
D'autres processus n'ont pas de chemin du tout :)
20 juin 2006 à 19:43
Si haProcess == NULL bien entendu que pas de CloseHandle.
20 juin 2006 à 14:44
Merci pour l'encouragement :D
20 juin 2006 à 02:22
if(haProcess == NULL){CloseHandle(haProcess); return FALSE;}
On ne ferme pas un handle invalide mais par contre il faut libérer la mémoire allouée plus haut.
Vérifie tous les cas de sortie de cette fonction, il ne faut rien oublier, c'est le cas typique ou qlq 'goto' judicieux ne gache rien à l'affaire.
Bon travail, continue ainsi.
14 juin 2006 à 20:11
14 juin 2006 à 20:08
Mais celui de MinGW est en carton
14 juin 2006 à 20:07
14 juin 2006 à 20:05
14 juin 2006 à 20:05
14 juin 2006 à 20:03
14 juin 2006 à 20:01
Pour VisualC++ express, tu peux télécharger une image:
http://download.microsoft.com/download/7/6/0/760bd72d-bef3-4e0f-bdfb-1024ad5b005b/vc.iso
14 juin 2006 à 20:01
SendMessage(hlv, LVM_SETEXTENDEDLISTVIEWSTYLE, 0x20, 0x20);
14 juin 2006 à 19:58
14 juin 2006 à 19:54
14 juin 2006 à 19:48
14 juin 2006 à 19:42
Pour faire du code Win, les produits MS me semblent les mieux adaptés.
14 juin 2006 à 19:34
14 juin 2006 à 19:31
#define _WIN32_WINNT 0x501
14 juin 2006 à 19:22
14 juin 2006 à 19:17
14 juin 2006 à 19:10
ListView_SetExtendedListViewStyleEx(hListView, 0, LVS_EX_FULLROWSELECT);
14 juin 2006 à 19:08
14 juin 2006 à 19:07
Pour ce qui est des noms, la méthode donnée est bonne, mais limitée, car on récupère les proprités de sécurité grâce au chemin de l'exe, hors il y en a certain qui n'en on pas :s et donc la je suis bloqué.
14 juin 2006 à 18:14
14 juin 2006 à 18:08
A ce que je vois tu n'a pas réussi a trouver le nom d'utilisateur qui a lancé le processus.
Tu devrais peut être retenter le coup dans le forum maintenant que BruNews est la...
6 juin 2006 à 20:21
6 juin 2006 à 18:51
Tu devrais essayer de la faire
3 juin 2006 à 20:42
3 juin 2006 à 18:08
3 juin 2006 à 18:05
Ta méthode n'est pas la même que celle de BruNews de toute facons
3 juin 2006 à 18:02
3 juin 2006 à 17:55
http://www.cppfrance.com/codes/LISTE-PROCESSUS-API-NATIVE-WIN32_17658.aspx
http://www.cppfrance.com/codes/ENUMERATION-PROCESSUS-DECHARGEMENT-FORCE-DLL_30494.aspx