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

Connaitre comment est lancé un exe ?

7 réponses
Avatar
Franck
Bonjour,

Est-il possible de savoir si un exe windev est lancé depuis un service
ou depuis une session "normale" ?

Merci d'avance.

Franck

7 réponses

Avatar
Romain PETIT
Franck vient de nous annoncer :
Bonjour,

Est-il possible de savoir si un exe windev est lancé depuis un service
ou depuis une session "normale" ?



Un service a pour parent Service.exe.

Donc il faut récupérer les infos du processus parent.

Mais étant donné que ton EXE Windev n'est pas directement un Service
(tu est passé par WDService, XYNTService ou autre), il faudra donc
récupérer ensuite le parent du parent...

A+

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Romain PETIT
Franck vient de nous annoncer :
Bonjour,

Est-il possible de savoir si un exe windev est lancé depuis un service
ou depuis une session "normale" ?



Un service a pour parent Service.exe.

Donc il faut récupérer les infos du processus parent.

Mais étant donné que ton EXE Windev n'est pas directement un Service
(tu es passé par WDService, XYNTService ou autre), il faudra donc
récupérer ensuite le parent du parent...

A+

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Franck
Romain PETIT a écrit :
Franck vient de nous annoncer :
Bonjour,

Est-il possible de savoir si un exe windev est lancé depuis un service
ou depuis une session "normale" ?



Un service a pour parent Service.exe.

Donc il faut récupérer les infos du processus parent.

Mais étant donné que ton EXE Windev n'est pas directement un Service (tu
es passé par WDService, XYNTService ou autre), il faudra donc récupérer
ensuite le parent du parent...

A+



Merci de ta réponse et comment on récupère le parent d'un processus avec
windev ?
Avatar
Romain PETIT
Franck a utilisé son clavier pour écrire :
Merci de ta réponse et comment on récupère le parent d'un processus avec
windev ?



Par exemple :
http://centrewd.free.fr/?page=ficheapi&t=f&n=CreateToolhelp32Snapshot

La structure PROCESSENTRY32 contient le th32ParentProcessID
http://centrewd.free.fr/?page=ficheapi&t=s&n=PROCESSENTRY32

A+

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Franck
Romain PETIT a écrit :
Franck a utilisé son clavier pour écrire :
Merci de ta réponse et comment on récupère le parent d'un processus avec
windev ?



Par exemple :
http://centrewd.free.fr/?page=ficheapi&t=f&n=CreateToolhelp32Snapshot

La structure PROCESSENTRY32 contient le th32ParentProcessID
http://centrewd.free.fr/?page=ficheapi&t=s&n=PROCESSENTRY32

A+



Merci beaucoup, je me penche là-dessus bien que cela me paraisse un peu
abscons...

Franck
Avatar
Franck
Bonjour,

Quelqu'un aurait-il une autre piste svp ?

Merci d'avance.

Franck


Romain PETIT a écrit :
Franck a utilisé son clavier pour écrire :
Merci de ta réponse et comment on récupère le parent d'un processus avec
windev ?



Par exemple :
http://centrewd.free.fr/?page=ficheapi&t=f&n=CreateToolhelp32Snapshot

La structure PROCESSENTRY32 contient le th32ParentProcessID
http://centrewd.free.fr/?page=ficheapi&t=s&n=PROCESSENTRY32

A+



Avatar
Romain PETIT
Le 05/01/2008, Franck a supposé :
Bonjour,

Quelqu'un aurait-il une autre piste svp ?



Pourquoi, c'est pourtant une bonne piste :

- tu récupères la "lignée" avec ma fonction ci-dessous
- si la lignée commence (enfin se termine) par
System-smss-winlogon-services alors l'exe en cours a été lancé par un
service...(enfin, à priori sous XP, à vérifier)

A+

http://rompetit.free.fr/Pub/WD7/fg_RecupereProcessParent.txt
PROCEDURE fg_RecupereProcessParent(sLignéeProcess est une chaîne = "", eProcessID=-1, sErr est une chaîne = "", eHandleSnapshot est un entier = 0)
// Version 1.00 pour WD7/7.5 et sup
// (c) janvier 2008 Romain PETIT (http://cerbermail.com/?O16kfXOFcq)
// sous licence WD-LIBRE (http://www.windasso.org)
// But : Récupérer l'Id process parent à partir d'un Id process ainsi que la "lignée"
// Paramètres :
// - chaine sLignéeProcess qui sera modifée dans la fonction (passée par adresse) et qui contiendra au final la lignée
// au format : Id Process<TAB>Exe<RC>Id Process Père<TAB>Exe père(<RC>Id Process grand-père<TAB>Exe grand-père...)
// - entier eProcessID : ID du process, -1 par défaut correspond au process en cours
// - chaine sErr : sera modifée dans la fonction (passée par adresse)
// - entier eHandleSnapshop : 0, utilisé pour l'appel récursif
// Retour : Process ID père du processID passé en paramètre
// en cas d'erreur, la fonction retourne -1 et renseigne la chaine sErr passée par adresse.
// sinon, la fonction retourne le process ID père et renseigne la lignée complète dans la chaine sLignéeProcess
// passée en paramètre
// Références API:
// - http://msdn2.microsoft.com/en-us/library/ms682489.aspx
// NB :
// - ne fonctionne que sous systeme >W2000
//
// Exemple :
// sInfos est une chaine
// eProcessParent est un entier
// eProcessParent = fg_RecupereProcessParent(sInfos)
// Info("Le process parent du processus en cours est <"+eProcessParent+">, infos lignée = "+RC +sInfos)
// ou
// eProcess est un entier = Saisie1 //saisir dans le champs Saisie le Pid d'un process
// sInfos est une chaine
// sErreur est une chaine
// eProcessParent est un entier
// eProcessParent = fg_RecupereProcessParent(sInfos, eProcess, sErreur)
// SI eProcessParent<>-1 ALORS
// Info("Le process parent du processus en cours est <"+eProcessParent+">, infos lignée = "+RC+ sInfos)
// SINON
// Erreur("Erreur lors de la récupération du process parent : " + sErreur)
// SIN
//

strPROCESSENTRY32 est une structure
dwSize est un entier
cntUsage est un entier
th32ProcessID est un entier
th32DefaultHeapID est un entier
th32ModuleID est un entier
cntThreads est un entier
th32ParentProcessID est un entier
pcPriClassBase est un entier
dwFlags est un entier
szExeFile est une chaîne ASCIIZ sur 260
FIN

TH32CS_SNAPPROCESS est un entier = 0x2
INVALID_HANDLE_VALUE est un entier =-1

structProcessInfo est un strPROCESSENTRY32
bOK est un booléen
bProcessTrouvé est un booléen
sNomExeParent est une chaîne
eProcessIDParent est un entier
eProcessIDParentTrouvé est un entier
bDetruireSnapshot est un booléen

eProcessIDParent = -1
eProcessIDParentTrouvé = -1

// -1 : on prend le processus en cours
SI eProcessID = -1 ALORS eProcessID = API("kernel32", "GetCurrentProcessId")

SI eHandleSnapshot = 0 ALORS //1er appel...(ne sera pas appellée lors des appels récursifs)
eHandleSnapshot = AppelDLL32("kernel32", "CreateToolhelp32Snapshot", TH32CS_SNAPPROCESS, 0)
bDetruireSnapshot = Vrai
FIN

SI PAS eHandleSnapshot = INVALID_HANDLE_VALUE ALORS
// 1er process (il faut renseigner dwSize)
structProcessInfo:dwSize = Dimension(structProcessInfo)
bOK = AppelDLL32("kernel32", "Process32First", eHandleSnapshot, &structProcessInfo)
TANTQUE bOK
SI structProcessInfo:th32ProcessID = eProcessID ALORS
bProcessTrouvé = Vrai
sLignéeProcess += structProcessInfo:th32ProcessID + TAB + structProcessInfo:szExeFile
// ce process a-t-il un parent ?
eProcessIDParent = structProcessInfo:th32ParentProcessID
SI eProcessIDParent > 0 ALORS
sLignéeProcess += RC
// on appelle la fonction de façon recursive
// sLignéeProcess est modifiée dans la focntion
eProcessIDParentTrouvé = fg_RecupereProcessParent(sLignéeProcess, structProcessInfo:th32ParentProcessID, sErr, eHandleSnapshot)
FIN
SORTIR
FIN
// process suivant
bOK = AppelDLL32("kernel32", "Process32Next", eHandleSnapshot, &structProcessInfo)
FIN

SI PAS bProcessTrouvé ALORS
sErr += "Le process passé en paramètre ("+eProcessID+") n' a pas été trouvé dans la liste des process en cours"
FIN

SI bDetruireSnapshot ALORS
AppelDLL32("kernel32", "CloseHandle", eHandleSnapshot)
FIN
// Un parent existe mais il n'a pas pu être listé (n'existe plus)
SI eProcessIDParentTrouvé = -1 ET eProcessIDParent > 0 ALORS
sLignéeProcess+= eProcessIDParent+TAB+"<processus inexistant>"
FIN
SINON
sErr += "Echec lors de la création du snapshot " + ErreurInfo(errMessageSystème)
FIN

RENVOYER eProcessIDParent

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)