Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Intercettare chiusura processo
Forum - C/C++ - Intercettare chiusura processo

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
robrock80 (Normal User)
Pro


Messaggi: 143
Iscritto: 11/12/2006

Segnala al moderatore
Postato alle 22:40
Martedì, 16/03/2010
Salve a tutti. In Windows esiste un modo per intercettare da parte del processo stesso la sua chiusura?
Ossia c'è un modo per lanciare una funzione da parte del processo stesso qualora venisse killato?

Ultima modifica effettuata da robrock80 il 16/03/2010 alle 22:47
PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 1:02
Mercoledì, 17/03/2010
si può fare, si può fare...

Spiegazione lunga:
http://msdn.microsoft.com/it-it/library/xdkz3x12.aspx

Spiegazione breve:
riassumendo, crei una funzione che funge da handler, e la "registri" come handler personalizzato per la gestione del segnale di terminazione ( SIGTERM )

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <signal.h>
  3.  
  4. // Questa funzione sarà "magicamente" chiamata dall'OS
  5. void funzioneStrafica(int segnale)
  6. {
  7.   if ( segnale == SIGTERM )
  8.   {
  9.     printf("Figata, mi stanno chiudendo!\n");
  10.     exit(0);
  11.   }
  12. }
  13.  
  14. int main()
  15. {
  16.   // Installo un handler per il segnale di chiusura,
  17.   // Passo alla funzione l'identificatore del segnale che mi interessa (SIGTERM)
  18.   // e anche il puntatore alla funzione che deve essere chiamata (funzioneStrafica)
  19.   signal( SIGTERM, funzioneStrafica );
  20.  
  21.   while (1) ; // Loop infinito, perchè in fondo, a me, me piace...
  22.  
  23.   return 0;
  24. }



PS: Non ho provato il codice, ma dovrebbe andare ;)

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6384
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 9:58
Mercoledì, 17/03/2010
The SIGILL and SIGTERM signals are not generated under Windows.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
robrock80 (Normal User)
Pro


Messaggi: 143
Iscritto: 11/12/2006

Segnala al moderatore
Postato alle 10:58
Mercoledì, 17/03/2010
Testo quotato

Postato originariamente da nessuno:

The SIGILL and SIGTERM signals are not generated under Windows.



... They are included for ANSI compatibility. Thus you can set signal handlers for these signals with signal, and you can also explicitly generate these signals by calling raise.

Non riesco a capire il continuo (preso su MSDN) della riga che tu hai scritto (Maledetto inglese)

Ultima modifica effettuata da robrock80 il 17/03/2010 alle 11:01
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6384
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 11:29
Mercoledì, 17/03/2010
Non puoi usare quei segnali perchè non sono generati da Windows. Per compatibilità, puoi indicare nel tuo codice delle funzioni che le gestiscano e puoi esplicitamente generare i segnali chiamando la raise.

In pratica, non funzionerà se chiudi un processo dal task manager.

Per individuare la chiusura di un processo, mi sa che l'unico modo è effettuare un hooking della API TerminateProcess (una sorta di detours) ... ma non è affatto una cosa semplice.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
robrock80 (Normal User)
Pro


Messaggi: 143
Iscritto: 11/12/2006

Segnala al moderatore
Postato alle 11:38
Mercoledì, 17/03/2010
Ho trovato questo,

http://www.codeproject.com/KB/DLL/funapihook.aspx

prima che lo inizio a studiare, pensi che mi possa aiutare?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6384
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 11:44
Mercoledì, 17/03/2010
Sì ... potrebbe ma

1) il lavoro potrebbe rivelarsi complesso, più di quanto appare nell'articolo ...

2) questo tipo di approccio potrebbe essere individuato come "malvagio" da parte di antivirus ...

3) probabilmente ti basta un metodo più semplice ...

Pensavo ad un processo "sentinella" avviato dal processo principale. Potrebbero "sorvegliarsi" a vicenda (a tempo) in modo che uno riavvii l'altro quando non lo trova.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
robrock80 (Normal User)
Pro


Messaggi: 143
Iscritto: 11/12/2006

Segnala al moderatore
Postato alle 11:50
Mercoledì, 17/03/2010
... Avevo pensato anche io alla soluzione di un handler al processo, ma se riesco a renderlo autonomo è meglio. Stò leggendo l'articolo ed è un pò complicato: io ci provo...
Ti ringrazio per l'attenzione dedicata fino ad ora e se riesci a scoprire qualcosa al riguardo (o se decidi di cimentartici) fammi sapere.

Ultima modifica effettuata da robrock80 il 17/03/2010 alle 11:52
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6384
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 12:09
Mercoledì, 17/03/2010
Testo quotato

Postato originariamente da robrock80:

Stò leggendo l'articolo ed è un pò complicato: io ci provo...



Tieni presente che è una soluzione "fortemente" dipendente dalla versione del sistema operativo ... (potresti avere problemi non solo se passi da XP a Win7, ma anche tra release diverse dello stesso sistema, che so, tra XP SP2 e XP SP3 ...)


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo