Je fait un "PROCES" à PB, j'ai besoin d'un bon avocat

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Je fait un "PROCES" à PB, j'ai besoin d'un bon avocat

Message par Kwai chang caine »

Bonjour à tous

J'suis en train de fouiner dans les PROCESS..et c'est encore un endroit que j'aurais pas du visiter :oops:

Moi je croyais naivement que un PROCESS avait un ID et que basta....
Non non....c'est pas si simple...il a aussi un handle comme les fenetres et encore plein d'autres chiffres que j'y comprend rien :(

Alors j'me suis dit KCC c'est le moment de faire un code qui met en evidence, toutes les infos sur les PROCESS pour bien comprendre qui est qui et qui fait quoi...
J'ai commencé à mettre les commentaires, mais j'sais meme pas quoi mettre :oops:
En plus, j'obtient 4 chiffres differents 8O

Si y'en a un qui a tout lu FREUD sur les PROCESS, peut etre pourrait il m'aider a faire ce code qui expliquerait à ceux qui savent pas, comment ça fonctionne....à commencer par moi :oops: (Noblesse oblige) :mrgreen:

Code : Tout sélectionner

; Récupérer le handle du process grace à RunProgram()
hProcess = RunProgram("notepad.exe", "", "", #PB_Program_Open|#PB_Program_Read)
Debug "Handle du Process donné par RunProgram() = " + Str(hProcess)

; Obtenir l'ID du process a partir de son Handle
ProcessID = ProgramID(hProcess)
Debug "Identificateur du Process donné par ProgramID() = " + Str(ProcessID)

; ?????????? Quoi c'est ????????
hProcess2 = OpenProcess_(#PROCESS_ALL_ACCESS, #False, ProcessID)
Debug "Handle du Process donné par OpenProcess() = " + Str(hProcess2)

Delay(100)

; Obtenir l'ID du process a partir du handle de sa fenetre
HwndFenetre = FindWindow_(0, "Sans titre - Bloc-notes") 
GetWindowThreadProcessId_(HwndFenetre, @ProcessID2) 
Debug "Identificateur du Process donné par le nom de la fenetre = " + Str(ProcessID2)

; Obtenir l'ID du process en cours (Purebasic_compilationX.exe)
ProcessEnCours = GetCurrentProcessId_()
Debug "Identificateur du Process en cours donné par GetCurrentProcessId() = " + Str(ProcessEnCours)

CallDebugger
KillProgram(hProcess)
CloseProgram(hProcess)
Bonne journée
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Je fait un "PROCES" à PB, j'ai besoin d'un bon avocat

Message par Backup »

de memoire : (sans jeux de mot)


tout prg executé en Ram est considéré comme un "process" (nom anglais qui signifie "processus" )

chaque "process" (prg en Ram) a un ID ( abreviation de Identifiant )

un prg (un process) en Ram peut avoir une Fenetre (dans un system multiache c'est quasi toujour le cas (elle peut etre invisible))
cette fenetre qui "contient" le prg a un "Handle" .. un Identifiant d'objet en quelque sorte :)

voila pour ce que j'en ai compris :)

d'ou l'existance de fonctions (Api) qui te renvoient l'ID du prg en Ram (Process)
qui te renvoient un handle d'apres l'iD , ou voir un Id d'apres handle ?? etc ...
ou qui te renvoient un ID d'apres le titre de la fenetre ...

L'ID reste l'info la plus importante ! c'est par l'ID que tu ejecte un prg (process) de la ram ;)

les ID sont unique a chaque prg !

et là, je vais meme aller peut etre un poil loin
il me semble qu'un prg xx.exe a toujours le meme ID sur ton system !
me trompai_je ?
mais si je me trompe ça confirmerai que le system réa tribut les ID libres .. d'ou la presence de fonction qui permettent de connaitre
l'ID d'apres le Handle d'une fenetre , voir d'apres sont titre ...

... hulm j'ai fait une librairie la dessus, mais j'ai oublié comment elle marche :lol:
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Je fait un "PROCES" à PB, j'ai besoin d'un bon avocat

Message par Kwai chang caine »

Merci DOBRO de ces explications

Le coup de la reatribution du meme ID, je savais pas 8O

Pour le reste, j'avais un peu compris comme tu le dit.
Ce qui me paume c'est dans le resultat:
Handle du Process donné par RunProgram() = 3804320
Identificateur du Process donné par ProgramID() = 4828
Handle du Process donné par OpenProcess() = 184
Identificateur du Process donné par le nom de la fenetre = 4828
Identificateur du Process en cours donné par GetCurrentProcessId() = 2196
Handle du Process donné par RunProgram() = 3804320
D'accord a chaque RunProgram j'ai un handle de process donné par WINDOWS, ça ça va :)
Identificateur du Process donné par ProgramID() = 4828
Bon ...d'apres ce Handle de process appelé "hProcess" pour les intimes, je peux lui demander l'ID de ce process..ça roule toujours :D
Handle du Process donné par OpenProcess() = 184
Mais OpenProcess il est censé de ce que j'ai lu retourner le hProcess en partant de l'ID..et ben des nefles..y retourne un autre chiffre vu "nulle part ailleurs" comme C+....(Sauf que c'est pas un langage :lol:)

Bizzare non ?? :roll:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Je fait un "PROCES" à PB, j'ai besoin d'un bon avocat

Message par Backup »

Kwai chang caine a écrit : Mais OpenProcess il est censé de ce que j'ai lu retourner le hProcess en partant de l'ID..

t'es sur de ça ?

c'est pas plutot un code (d'erreur ou pas) , qui rassurerai sur la presence du process ou pas ?..
en fait là je sais pas trop.... :roll:

...

je vois que cette fonction est employée de la sorte :
if (OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID) == NULL)
ce qui pourrai signifier, que c'est bien un code d'erreur ou bien un code différent de zero , qui prouve que cette fonction... fonctionne :)

du coup je suis pas sur que la chiffre de retour est un quelconque rapport avec l'ID ou le Handle du prg

ce serai un Handle de fonction plutot ...

Look here : http://www.developpez.net/forums/d96117 ... enprocess/
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Je fait un "PROCES" à PB, j'ai besoin d'un bon avocat

Message par Kwai chang caine »

t'es sur de ça ?
Baaah depuis le temps que tu me connais, tu devrais savoir que c'est pas une question a me poser :oops:
Des fois quand je donne mon nom et qu'on me pose cette question, j'arrive a reflechir :roll:

Mais la doc de CROCRO dit
Return value
If the function succeeds, the return value is an open handle to the specified process.
http://msdn.microsoft.com/en-us/library ... p/ms684320

Donc sur, non...mais j'crois...

Par contre, j'ai trouvé une toute aussi sure, info de FREAK (Celui qui m'aime bien :mrgreen:)
Freak a écrit :If you open the Process using openprocess, a new handle will be created,
you never get the same as you allready have. Each OpenProcess creates
it's own handle, which has special rights and stuff.
Bon cela pourrait clore l'affaire, si ce n'est qu'il repondait a un code ou la ligne est

Code : Tout sélectionner

 hProcess=OpenProcess_(#PROCESS_CREATE_PROCESS,0,pid)
Alors j'm'ai dit...que peut etre la constante #PROCESS_CREATE_PROCESS cree un nouveau process, donc dans ce cas cela expliquerais la reponse de FREAK
Mais la mienne #PROCESS_ALL_ACCESS

Code : Tout sélectionner

hProcess2 = OpenProcess_(#PROCESS_ALL_ACCESS, #False, ProcessID)
normalement ouvre un process existant dixit ApiGuide
ApiGuide a écrit :The OpenProcess function opens an existing process object.
Remarque je viens de voir que y'en a d'autre
· dwDesiredAccess
[in] Specifies the access to the process object. For operating systems that support security checking, this access is checked against any security descriptor for the target process. This parameter can be STANDARD_RIGHTS_REQUIRED or one or more of the following values.
PROCESS_ALL_ACCESS
Specifies all possible access flags for the process object.
PROCESS_CREATE_PROCESS
Used internally.
PROCESS_CREATE_THREAD
Enables using the process handle in the CreateRemoteThread function to create a thread in the process.
PROCESS_DUP_HANDLE
Enables using the process handle as either the source or target process in the DuplicateHandle function to duplicate a handle.
PROCESS_QUERY_INFORMATION
Enables using the process handle in the GetExitCodeProcess and GetPriorityClass functions to read information from the process object.
PROCESS_SET_QUOTA
Enables using the process handle in the AssignProcessToJobObject and SetProcessWorkingSetSize functions to set memory limits.
PROCESS_SET_INFORMATION
Enables using the process handle in the SetPriorityClass function to set the priority class of the process.
PROCESS_TERMINATE
Enables using the process handle in the TerminateProcess function to terminate the process.
PROCESS_VM_OPERATION
Enables using the process handle in the VirtualProtectEx and WriteProcessMemory functions to modify the virtual memory of the process.
PROCESS_VM_READ
Enables using the process handle in the ReadProcessMemory function to read from the virtual memory of the process.
PROCESS_VM_WRITE
Enables using the process handle in the WriteProcessMemory function to write to the virtual memory of the process.
SYNCHRONIZE
Windows NT/2000: Enables using the process handle in any of the wait functions to wait for the process to terminate.
Et si ça se trouve c'est PROCESS_VM_READ le gagnant de la tringle a rideau....faut que j'alle..mais je regarderais
Merci encore DOBRO
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Je fait un "PROCES" à PB, j'ai besoin d'un bon avocat

Message par Backup »

ha bah oui :)

OpenProcess ouvre un process , donc renvoie l'id du nouveau process !!
apres tout un process (prg en ram) peut etre amené a ouvrir un autre process() grace a OpenProcess () du coup ça se comprends :)

effectivement la constante fait varier le comportement de la fonction :)
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Je fait un "PROCES" à PB, j'ai besoin d'un bon avocat

Message par Kwai chang caine »

du coup ça se comprends
T'as de la chance :oops:
Mouaihhh !!! bah c'est qu'a moitié clair tout ça :roll:

J'ai éssayé avec

Code : Tout sélectionner

hProcess2 = OpenProcess_(#PROCESS_VM_READ, #False, ProcessID)
Et c'est kifkif, ça donne ça:

Code : Tout sélectionner

Handle du Process donné par RunProgram() = 3875688
Identificateur du Process donné par ProgramID() = 2060
Handle du Process donné par OpenProcess() = 152
Identificateur du Process donné par le nom de la fenetre = 2060
Identificateur du Process en cours donné par GetCurrentProcessId() = 1884
J'sais toujours pas a quoi correspond ce chiffre 152 donné par OpenProcess ?? :roll:
Ca ouvre un process ...mais un process de quoi ???? puisqu'on lui donne rien d'autre que l'ID d'un process existant...
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Je fait un "PROCES" à PB, j'ai besoin d'un bon avocat

Message par Backup »

Kwai chang caine a écrit :
du coup ça se comprends
T'as de la chance :oops:
Mouaihhh !!! bah c'est qu'a moitié clair tout ça :roll:

J'ai éssayé avec

Code : Tout sélectionner

hProcess2 =²
Et c'est kifkif, ça donne ça:

Code : Tout sélectionner

Handle du Process donné par RunProgram() = 3875688
Identificateur du Process donné par ProgramID() = 2060
Handle du Process donné par OpenProcess() = 152
Identificateur du Process donné par le nom de la fenetre = 2060
Identificateur du Process en cours donné par GetCurrentProcessId() = 1884
J'sais toujours pas a quoi correspond ce chiffre 152 donné par OpenProcess ?? :roll:
Ca ouvre un process ...mais un process de quoi ???? puisqu'on lui donne rien d'autre que l'ID d'un process existant...


il semblerai que le handle "open" process que retourne cette fonction soit utilisable pour ces fonctions :
AssignProcessToJobObject
CloseHandle
CreateProcess
CreateRemoteThread
DuplicateHandle
GetCurrentProcess
GetCurrentProcessId
GetExitCodeProcess
GetModuleFileNameEx
GetPriorityClass
Process and Thread Functions
Processes
ReadProcessMemory
SetPriorityClass
SetProcessWorkingSetSize
TerminateProcess
VirtualProtectEx
WriteProcessMemory
en clair si tu fait :

BOOL WINAPI TerminateProcess(
__in HANDLE hProcess,
__in UINT uExitCode
);
avec HANDLE hProcess=152 (la valeur que te retourne openprocess())
tu devrai killer le process ... ?? tu fais le test j'ai la bulle de le faire :lol:
PAPIPP
Messages : 534
Inscription : sam. 23/févr./2008 17:58

Re: Je fait un "PROCES" à PB, j'ai besoin d'un bon avocat

Message par PAPIPP »

Bonjour KCC
Pour trouver quelques infos sur un process
Qu'est ce qu'un processus ?
Un processus (process en anglais) est une séquence d'instructions (en langage machine, c'est-à-dire le binaire) chargée en mémoire (RAM) qui s'exécutent par le processeur. Un processus a une notion séquentielle dans le temps, ce qui veut dire qu'il a un début et une fin. L'exécution d'un processus peut être manuel ou automatique.

Pour des informations supplémentaires :

J'avais déjà répondu à blendman http://www.purebasic.fr/french/viewtopi ... 62#p137362
Avec comme structure pour avoir 5 infos sur un process

Code : Tout sélectionner

Structure inf_wnd 
	pid.l ; Process IDentifier
	hwnd.l ;Handle
	NOM_EXE.s{#MAX_PATH} ; Nom de l'exec
	nom_WND.s{#MAX_PATH} ; Nom sous window
	ind.w ; CTRL_ID
EndStructure 
ou peut trouver dans d'autres exemples d'autres infos sur le process
Par exemple:
process parent
Si c'est une fenêtre les caractéristiques de la fenêtre
etc..
@+
Il est fort peu probable que les mêmes causes ne produisent pas les mêmes effets.(Einstein)
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Je fait un "PROCES" à PB, j'ai besoin d'un bon avocat

Message par Kwai chang caine »

@DOBRO
Je crois que t'as mis dans le mille Émile :lol:
Tu as raison ce hProcess2 apparement est fait pour fermer le process et surement faire autre chose peut etre

Code : Tout sélectionner

; Récupérer le handle du process grace à RunProgram()
hProcess = RunProgram("notepad.exe", "", "", #PB_Program_Open|#PB_Program_Read)
Debug "Handle du Process donné par RunProgram() = " + Str(hProcess)

; Obtenir l'ID du process a partir de son Handle
ProcessID = ProgramID(hProcess)
Debug "Identificateur du Process donné par ProgramID() = " + Str(ProcessID)

; ProcessID permettant de manipuler le process
Process = OpenProcess_(#PROCESS_ALL_ACCESS, #False, ProcessID)
Debug "Handle du Process donné par OpenProcess() = " + Str(Process)

Delay(200)

; Obtenir l'ID du process a partir du handle de sa fenetre
HwndFenetre = FindWindow_(0, "Sans titre - Bloc-notes")
GetWindowThreadProcessId_(HwndFenetre, @ProcessID2)
Debug "Identificateur du Process donné par le nom de la fenetre = " + Str(ProcessID2)

; Obtenir l'ID du process en cours (Purebasic_compilationX.exe)
ProcessEnCours = GetCurrentProcessId_()
Debug "Identificateur du Process en cours donné par GetCurrentProcessId() = " + Str(ProcessEnCours)

CallDebugger
TerminateProcess_(Process , 1) ; Remplace KillProgram(hProcess)
CloseProgram(hProcess)
Quelle idée il a eu FRED, de créer encore un ID de plus avec son ProgramID si OpenProcess en donne un autre ???
D'habitude lui qui essaie de tout simplifier.... :roll:
Ca commence a faire compliqué tous ces nombres pour presque faire la même chose :(

En tous cas merci DOBRO 8)

@PAPIPP
Ouaaaouuu !!! J'l'ai loupé ton super code, j'adore 8O
C'est de la haute couture de process 8)

Apparement ton code confirme ce qu'a dit DOBRO
Ce hProcess sert à demander des choses sur les process, dans ton cas le Chemin dans le cas de DOBRO la fermeture :D

Code : Tout sélectionner

hProcess.l=OpenProcess_(#PROCESS_ALL_ACCESS,0,pid);
  Name.s=Space(256)
 
  If OpenLibrary(0,"PSAPI.DLL")
    *F=GetFunction(0,"GetModuleFileNameExA")
    If *F
      CallFunctionFast(*F,hProcess,0,@Name,#MAX_PATH)
"Mézalor" ??? tu appelles ça aussi hProcess, mais FREAK appelle le retour de RunProgram hProcess aussi, alors que ça n'a rien à voir apparement
Celui de RunProgram() a l'air d’être une adresse mémoire de Windows (Long) donc bien un handle ???

Pas facile parce que si y'a pas un nom par info...on peut se mélanger les pingoinces non ??

En tout cas je te remercie aussi beaucoup de ton aide 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
PAPIPP
Messages : 534
Inscription : sam. 23/févr./2008 17:58

Re: Je fait un "PROCES" à PB, j'ai besoin d'un bon avocat

Message par PAPIPP »

Bonjour KCC
Voici une suite complète gratuite pour ausculter ou réparer ton PC :

http://technet.microsoft.com/fr-fr/sysi ... s/bb842062
Sysinternals Suite est un ensemble de programmes très légers, réunis au sein d’un même logiciel qui a pour fonction principale d’apporter des outils efficaces pour diagnostiquer et réparer Windows.
Cette suite contient notamment Autoruns qui contrôle les applications au démarrage de Windows
Process Explorer analyse les processus de ton système en profondeur.

Pour explorer les infos d’un PROCESS
Process Explorer v11.02
Par Mark Russinovich
Introduction
Vous êtes-vous déjà demandé quel programme a un fichier ou un répertoire particulier ouvert ? Vous pouvez désormais le savoir. Process Explorer affiche des informations sur les descripteurs et les processus DLL ouverts ou chargés.
L'affichage de Process Explorer est composé de deux sous-fenêtres. La fenêtre supérieure affiche toujours une liste des processus actuellement actifs, y compris les noms de leurs propres comptes, tandis que les informations affichées dans la fenêtre inférieure dépendent du mode dans lequel se trouve Process Explorer : En mode descripteur, vous verrez les descripteurs que le processus sélectionné dans la fenêtre supérieure a ouverts ; si Process Explorer est en mode DLL, vous verrez les DLL et les fichiers de mémoire que le processus a chargés. Process Explorer dispose également d'une fonctionnalité puissante de recherche qui affichera rapidement les processus ayant des descripteurs particuliers ouverts ou des DLL chargées.
Les fonctionnalités uniques de Process Explorer vous permettent de suivre les problèmes de versions DLL ou les fuites de descripteurs et fournissent un aperçu du fonctionnement des applications et de Windows.
Process Explorer fonctionne sous Windows 9x/Me, Windows NT 4.0, Windows 2000, Windows XP, Server 2003 et les versions 64 bits de Windows pour les processeurs x64 et IA64, et Windows Vista.


Process Monitor v1.11

Par Mark Russinovich et Bryce Cogswell
Paru le 02 avril 2007
Introduction

Process Monitor est un outil de surveillance avancé pour Windows qui affiche le système de fichiers, l'activité de thread/processus et le Registre en temps réel. Il associe les fonctionnalités de deux utilitaires Sysinternals d'ancienne génération, Filemon et Regmon, et dispose d'une importante liste d'améliorations, notamment un riche filtrage non destructif, des propriétés d'événement complètes, telles que les identificateurs de session et noms d'utilisateur, des informations de processus fiables, des piles de thread complètes avec la prise en charge des symboles intégrée pour chaque opération, l'enregistrement simultané d'un fichier, et bien plus encore. Les puissantes fonctionnalités de Process Monitor en font un utilitaire fondamental dans votre boîte à outils pour rechercher les logiciels malveillants et dépanner le système.

Process Monitor fonctionne sous Windows 2000 SP4 avec le correctif cumulatif, Windows XP SP2, Windows Serve
@+
Il est fort peu probable que les mêmes causes ne produisent pas les mêmes effets.(Einstein)
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Je fait un "PROCES" à PB, j'ai besoin d'un bon avocat

Message par Kwai chang caine »

JE LE VEUX !!!!
Image

Merci beaucoup PAPIPP 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Répondre