Newsgroup: it.comp.programmare.win32
Titolo: [NT] Determinare stato applicazioni

Sistema : Windows NT Server/Workstation 4.0 (Service Pack 5.0)
Dovrei scrivere un'applicazione che esegue un "polling" continuo dello
stato di altre applicazioni, per intraprendere particolari decisioni,
quando una o piu' di esse siano in uno stato preciso.
In pratica, si tratta di costruire un piccolo task manager,
all'interno del mio programma.
Vorrei pero', che questa applicazione girasse ad un livello superiore
rispetto alle altre. Devo creare un servizio ?
Ho pensato : e' possibile, invece, interrogare in qualche modo il task
manager per farsi riferire lo stato delle applicazioni ed
eventualmente comandarlo di chiudere una determinata applicazione ?
Per adesso, riesco a costruire un'applicazione che fa il polling dei
processi attivi, determinando quando essi sono in NOT RESPONDING
(esegue lo stesso codice del task manager con SendMessageTimeout(),
etc., ...) ed una che simula il blocco, pero' mi piacerebbe sapere se
e' possibile colloquiare in modo diretto col task manager...

 applicazione ?
Non mi risulta che ci siano interfacce documentate per farlo. Puoi
sempre "simulare" l'input di un utente spedendo i messaggi giusti ai
controlli giusti, ma e` una tecnica sporca e decisamente da evitare
(soprattutto perche` il Task Manager, dopotutto, non fa nulla di
particolarmente eclatante: si puo` replicarne il funzionamento in tutto
e per tutto).
---
Bye! Lorenzo Lutti
http://www.geocities.com/SiliconValley/Peaks/6258/

e per tutto).
Si', e' chiaro. Io riesco gia' a replicare il funzionamento del task
manager spedendo alle applicazioni il solito SendMessageTimeout e
valutandone il valore restituito.
Grazie, comunque, per le informazioni.

 I servizi girano in questa modalita' ?
Non so a cosa ti riferisca con "privilege mode". Intendi il "kernel
mode" (i tempi di esecuzione di un processo nelle modalita` kernel e
user te li fornisce GetProcessTimes)? in quel caso tutto dipende dalle
API che chiami, alcune API vengono eseguite quasi completamente in user
mode mentre altre fanno direttamente delle chiamate di sistema.
Il Task Manager usa entrambi i tipi di API, tanto e` vero che qualche
anno fa (tre-quattro) girava un exploit di questo tipo: si creava un
processo alla massima priorita` consentita dai propri privilegi e si
eseguiva un loop per hoggare la CPU. In questo modo il sistema era
bloccato e non si riusciva a interrompere il processo col Task Manager
perche` - facendo quest'ultimo delle chiamate in user mode - si bloccava
anche lui.
Ricordo che scrissi un piccolo programmino che trovava il modo di fare
soltanto chiamate di sistema che non si bloccavano (il codice a kernel
mode non e` schedulato), e che se si accorgeva che negli ultimi 2-3
minuti un'applicazione aveva usato piu` del 99.8% del CPU time la
killava automaticamente... poi in seguito la MS ha rilasciato una patch
per il task manager. :)


per il task manager. :)
C'e' un modo per sapere *quali* chiamate di sistema agiscono in kernel
mode ?
--
Andrea Laforgia (
andrea_...@bigfoot.com
)
---------------------------------------------
#exclude <windows.h>

Mi serve, piu' che altro, che il programma sia stabile
Stabile verso errori accidentali altrui, o che deve essere eseguito in
un ambiente ostile (con altri programmi che tentano di ucciderlo)?
Per caso non e' che hai mal posto la domanda. I programmi che vuoi
controllare non li puoi inserire in un Job, e poi controllare
quest'ultimo?
-- 
Tieni per te il Papero se vuoi la mia email
Sito Papero -> 
http://utenti.tripod.it/papero

 mode ?
A parte quello empirico (chiamate ripetute con monitoraggio di
GetProcessTimes) non ne conosco altri.
