Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

nom d'un process par les PsAPI

17 réponses
Avatar
Fred
Bonjour à tous,

J'aurais aimé savoir s'il y avait un moyen, qui fonctionne aussi bien
sur NT 4.0 que sur XP, 2000, 2003 (donc pas la ToolHelp library), de
réccupérer le nom d'un process à partir de son PID?

J'ai bien réccupéré un bout de code qui fait ça, mais si l'utilisateur
qui l'exécute n'est pas administrateur, alors certains process ne sont
pas accéssibles (comme Winlogon par exemple).

Le code en question fait un OpenProcess avec les flags
PROCESS_QUERY_INFORMATION et PROCESS_VM_READ avant de faire un
EnumProcessModules suivi d'un GetModuleFileNameEx.
Ce qui ne marche pas pour un utilisateur lamba (enfin pas sur tous les
process), c'est le PROCESS_VM_READ.

Je me dit qu'il doit quand même bien y avoir moyen de réccupérer une
info aussi idiote que le nom du process... même quand l'utilisateur n'a
pas de préivilèges particulier... non?
Ce qui me fait penser ça, c'est que l'outil Process Explorer (pris sur
sysinternals) y arrive bien lui... je dois passer à côté de quelque chose :(

Merci d'avance...

Fred

7 réponses

1 2
Avatar
Patrick Philippot
Fred wrote:
Je n'ai malheureusement aucun contrôle sur l'authentification des
utilisateurs. Il faut bien, dans mon cas, qu'un utilisateur sans aucun
pouvoir puisse executer mon programme et lister (et nommer, puisque
c'est ce dernier point qui m'interesse) tous les process du système...



Bien. Je ne suis pas sûr qu'il y ait une solution. En fait, OpenProcess
ne plantera pas pour tous les processus, je pense. Ceux pour lesquels
l'autorisation ne sera pas accordée sont peut-être moins importants pour
l'utilisateur lambda?

J'ai posé la question sur le forum privé MS concernant l'existence d'une
version NT 4 de TOOLHELP.DLL. Je ne pense pas que ça existe mais je
vérifie...

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Avatar
Fred
Patrick Philippot a écrit :
Fred wrote:

Je n'ai malheureusement aucun contrôle sur l'authentification des
utilisateurs. Il faut bien, dans mon cas, qu'un utilisateur sans aucun
pouvoir puisse executer mon programme et lister (et nommer, puisque
c'est ce dernier point qui m'interesse) tous les process du système...




Bien. Je ne suis pas sûr qu'il y ait une solution. En fait, OpenProcess
ne plantera pas pour tous les processus, je pense. Ceux pour lesquels
l'autorisation ne sera pas accordée sont peut-être moins importants pour
l'utilisateur lambda?

J'ai posé la question sur le forum privé MS concernant l'existence d'une
version NT 4 de TOOLHELP.DLL. Je ne pense pas que ça existe mais je
vérifie...



OK, merci.

Sinon, j'avais pensé à l'utilisation de la fonction
ZwQuerySystemInformation... Est ce que ça pourrait me sortir d'affaire?

Je me dit qu'il doit bien y avoir une solution puisque Process Explorer
y arrive bien.

Merci encore.

Fred
Avatar
Patrick Philippot
Fred wrote:
Sinon, j'avais pensé à l'utilisation de la fonction
ZwQuerySystemInformation... Est ce que ça pourrait me sortir
d'affaire?
Je me dit qu'il doit bien y avoir une solution puisque Process
Explorer y arrive bien.



Process Explorer utilise effectivement largement les fonctions natives.
Dans son bouquin sur "Windows NT/2000 Native API Reference", Gary
Nebbett présente même un exemple de l'utilisation de
ZwQuerySystemInformation pour recréer une implémentation partielle de
Toolhelp.dll. Malheureusement, ce livre, malgré son intérêt, fait partie
des ouvrages archaïques livrés sans CD et non supportés sur un site
quelconque (en tous cas, je n'ai pas trouvé). Je ne peux donc pas vous
envoyer cet exemple.

Ceci étant, les explications concernant l'utilisation de cette seule
fonction occupent quasiment tout le premier chapitre et il y a de
nombreuses restrictions. Utiliser ces techniques dans un programme de
production me semble donc aventureux (avez-vous noté que Process
Explorer se plante de temps en temps?).

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Avatar
AMcD®
Patrick Philippot wrote:

Process Explorer utilise effectivement largement les fonctions
natives.



Plus des drivers perso. Le code pondu par Russinovich, heu c'est pas du VB
hein...

Dans son bouquin sur "Windows NT/2000 Native API Reference",
Gary Nebbett présente même un exemple de l'utilisation de
ZwQuerySystemInformation pour recréer une implémentation partielle de
Toolhelp.dll. Malheureusement, ce livre, malgré son intérêt, fait
partie des ouvrages archaïques



??? Archaïque ??? Qu'est ce qui est archaïque ? Parce qu'il n'y a pas de CD
? Je préfère un bouquin sans CD à prix abordable à un bouquin avec CD rempli
de trucs à la con qui n'ont aucun intérêt et que tu charges partout sur le
Net.

livrés sans CD et non supportés sur un
site quelconque (en tous cas, je n'ai pas trouvé). Je ne peux donc
pas vous envoyer cet exemple.



Ce livre montre des exemples d'implémentations, c'est vrai. Mais je
conseille tout de même d'écrire les siennes, le style de programmation de
l'ami Nebbett est un peu lourdingue et tu vas aussi vite d'écrire par
toi-même en utilisant son bouquin comme manuel de référence des fonctions.
Concernant l'API native, il n'y a qu'un artcile de Russinovich sur le Net,
en anglais et 2-3 autres trucs sans intérêts, en anglais aussi. En français,
un article également. De moi :-). Je ne l'héberge plus, mais on le trouve
facilement sur le Net.

Ceci étant, les explications concernant l'utilisation de cette seule
fonction occupent quasiment tout le premier chapitre et il y a de
nombreuses restrictions.



Tout à fait. Ce n'est pas du "simple".

Utiliser ces techniques dans un programme de
production me semble donc aventureux (avez-vous noté que Process
Explorer se plante de temps en temps?).



Je partage encore ton avis. Enfin bon, ZwQuerySystemInformation(), passe
encore. Un bon article ici :
http://www.thecodeproject.com/system/kernelspying.asp. Mais, tout de même,
il faut éviter les magouilles utilisant les fonctions non-officielle (oui,
c'est bien moi qui dit ça). Ce n'est pas portable, ça change à chaque SP, ce
n'est pas supporté, etc. Il vaux mieux s'appuyer sur Win32.

Enfin, si on n'a pas tous les droits administrateurs, si on ne peut pas
avoir un contrôle total, ben il ne faut pas rêver, on sera soumis à pas mal
de restrictions au niveau du code. En clair, il y a des choses qu'on ne
pourra pas faire.

--
AMcD®

http://arnold.mcdonald.free.fr/
Avatar
Patrick Philippot
AMcD® wrote:
??? Archaïque ??? Qu'est ce qui est archaïque ? Parce qu'il n'y a pas
de CD ?



Parce qu'il n'y a même pas de support en ligne chez l'éditeur, ne
serait-ce que pour les corrections d'erreurs. C'est quand même le
minimum de nos jours, non? Et USD $50 en prix de base n'est pas
spécialement bon marché :-) .

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Avatar
AMcD®
Patrick Philippot wrote:

Parce qu'il n'y a même pas de support en ligne chez l'éditeur, ne
serait-ce que pour les corrections d'erreurs. C'est quand même le
minimum de nos jours, non?



Heu, tu dois pas lire beaucoup de livres actuels... :-) Perso, j'en lis
environ une douzaine par an, plus ceux que je relis, etc. Les sites de
support sont rarissimes. Les liens donnés par les éditeurs sont souvent
vides, mis à jour chaque 14e pleine de lune ou... tout simplement bidons !
Ne parlons même pas des CDs fournis parfois...

Et USD $50 en prix de base n'est pas
spécialement bon marché :-) .



Tu le trouve partout à 43 $ (ne tient pas compte du prix de base, ça ne veut
rien dire). Une fois "transformé" en euros, une quarantaine. Vu les tas de
boue qu'on te vends à 50 euros ou bien plus actuellement (genre 350-400 p.
de screenshots sur 500 p.), je ne trouve pas ça excessif.

--
AMcD®

http://arnold.mcdonald.free.fr/
Avatar
Fred
AMcD® a écrit :
Patrick Philippot wrote:




Utiliser ces techniques dans un programme de
production me semble donc aventureux (avez-vous noté que Process
Explorer se plante de temps en temps?).




Je partage encore ton avis. Enfin bon, ZwQuerySystemInformation(), passe
encore. Un bon article ici :
http://www.thecodeproject.com/system/kernelspying.asp. Mais, tout de même,
il faut éviter les magouilles utilisant les fonctions non-officielle (oui,
c'est bien moi qui dit ça). Ce n'est pas portable, ça change à chaque SP, ce
n'est pas supporté, etc. Il vaux mieux s'appuyer sur Win32.

Enfin, si on n'a pas tous les droits administrateurs, si on ne peut pas
avoir un contrôle total, ben il ne faut pas rêver, on sera soumis à pas mal
de restrictions au niveau du code. En clair, il y a des choses qu'on ne
pourra pas faire.




Certes... j'essaye en effet d'éviter d'utiliser des fonctions non
documentées. Mais je ne compte utiliser cette implémentation que sur NT
4.0 (donc peu, voire pas du tout, soumis au changement ou aux services
packs) et utiliser la ToolHelp sur XP, 2000 et suivants...

Merci beaucoup en tout cas de l'intêret que vous avez porté à ma queston...

Fred
1 2