Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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é)
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é)
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é)
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é)
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é)
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é)
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 ?
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 ?
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 ?
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é)
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é)
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
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é)
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é)
- 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é)