Newsgroup: it.comp.lang.delphi
Titolo: Protezione del computer

Esiste una API che renda la mia applicazione modale rispetto il sistema?
Ovvero che fino a che la mia app. non termina il sistema rimane
esclusivamente a mia disposizione?
In alternativa (sicuramente c'e') qual e' la funzione API per disabilitare:
- CTRL+ALT+CANC
- Menu' Avvio
- e ogni altro messaggio che permetta al sistema di aprire altre
applicazioni.
Thanks.

 esclusivamente a mia disposizione?
Sì... ci vogliono alcuni accorgimenti :
Premesso che, a quanto mi sembra di capire, tu vuoi il massimo controllo su
un sistema che dovrà essere usato da utenti "occasionali" (?) cioè da
persone che potrebbero voler violare il tuo programma, gli accorgimenti da
prendere sono molti... perchè esistono molti modi (anche stupidi) per
violare un'applicazione.
Quelli che mi vengono in mente subito (al limite la sarà interessante
continuare questo thread) sono :
(Tieni conto che alcuni potrebbero non servirti o essere controproducenti...
visto che non conosco il tipo della tua applicazione)
1) Nascondere la barra delle applicazioni col menù di avvio.
2) Monitorare la pressione di tasti speciali ... forse si fa con gli Hook
(vedi Hooks) di Tastiera, che peraltro non ho ancora usato e quindi non so
esattamente come si scrivono.
3) Controllare che non vengano lanciati altri programmi al di fuori di
quelli preesistenti alla tua applicazione.
4) Creare un desktop virtuale in modo da non far accedere l'utente ad
Explorer in nessun modo.
5) Tenere sotto controllo lo stato della form... è ancora visibile? è ancora
al suo posto ? (vedi 6)
6) Disattivare gli screen saver.
7) Monitorare i messaggi "pericolosi" che arrivano alla tua applicazione,
cioè quelli per il ridimensionamento,
per la chiusura, la disattivazione o attivazione "forzata" di certi
componenti (come bottoni, per esempio) o il comando per rendere invisibile
una finestra, eccetera... ti consiglio di guardare sull'help l'argomento
"Window Functions" (è raggiungibile consultando la SetWindowPos e
spostandosi su Topic Group) per renderti conto di *cosa* possono fare altre
applicazioni alla tua applicazione...
Sono in ordine di complessità... sia dal punto di vista costruttivo (come si
realizzano) che quello della priorità (cioè cosa è più facile violare).
Ecco una piccola lista delle cose "immediate" che puoi guardare sull'help
per documentarti.
1) FindWindow, ShowWindowAsync
2) Vedi Hooks e Hotkeys
4) Form : FormStyle, OnDeactivate.
5) TTimer, IsWindowVisible, GetWindowRect
6) ... non ricordo bene ... è un messaggio comunque.
7) messaggi del tipo WM_ ...
Vedi tu cosa ti serve ... io ti ho dato una lista un po' voluminosa per
situazioni di alta sicurezza (cioè come mi regolerei io se dovessi creare un
programma che per esempio scambia dati di sicurezza con una banca, per
esempio).
Ciao, Davide DG

 esempio).
Ed è esattamente ciò che un programma del genere ti richiede...
Io ne ho sviluppato uno proprio per una banca e funzionava non male, i
problemi poi sorsero nel controllare i programmi che dovevano poter essere
eseguiti...
Aggiungerei alla lista di Davide il  controllo delle dialogs standard: se
permetti di usare il notepad (per esempio) e fai File --> Apri a quel punto
sei libero di eliminare/spostare ciò che vuoi e direi che non è carino...
Se ben ricordo hanno tutte una classe #32770 o qualcosa di simile, non
chiudere _tutte_ le finestre con quella classe, fai una ricerca nel
titolo...
[poi dipende dalle tue esigenze: se metti a disposizione un browser web
potresti voler evitare che ti cambino le impostazioni di connessione ecc
ecc...]
Ciao :-)
--
(¯`·.¸¸.·´¯`·.¸¸.-> Andrea <-.¸¸.·´¯`·.¸¸.·´¯)
AntiSpam: rimuovere il trattino basso dall'indirizzo per rispondere
AntiSpam: remove the underscore from the e-mail address to reply

 eseguiti...
perchè si possono cambiare i nomi degli exe ?
Ciao, Davide DG

 Ciao, Davide DG
Grazie 1000 per l'attenzione...il problema si riduce a 2 soluzioni:
1) O riesco a rendere in qualche modo il mio form SYSTEMMODAL...per
intenderci, come e' la finestra di dialogo di "Chiudi sessione...";
2) Oppure riesco a intercettare i messaggi di CTRL+ALT+CANC e l'accesso al
menu avvio...
Se qualcuno sa come risolvere il problema con la prima soluzione gli bacio i
piedi, perche' sarebbe tutto molto piu' semplice...altrimenti accetto
volentieri consigli anche  per la seconda soluzione... THANKS! :)

 perchè si possono cambiare i nomi degli exe ?
Non l'ho capita... (?)
Il mio problema era questo: la banca aveva commissionato ad una ditta un
browser modificato (basato su IE4) per garantire la sicurezza [non so bene
che razza di sistema di autenticazione usassero]...
Peccato che per poter "loggare" un nuovo utente (nuovo tizio col Bancomat)
servisse chiudere e riaprire il suddetto browser in un determinato modo...


 menu avvio...
var APerdere:integer;
SystemParametersInfo(Spi_ScreenSaverRunning,1,@APerdere,0);
Blocca ALT+CTRL+CANC, ALT+TAB, CTRL+ESC e qualcos'altro ancora...
(NB: solo sotto WIn9x)


- stabilità del sistema [ma qui si possono prendere i dovuti accorgimenti]
Il problema non si pone perche' finche' la mia applicazione gira nessun
processo deve essere lanciato e una volta chiusa la mia app. (con una PWD)
il computer deve essere utilizzabile al 100%. Diciamo che la mia app. deve
funzionare come una login per NT e una volta loggato si puo' fare tutto.
[OPINIONE]
Ho risolto parzialmente il problema la mia app. e' sempre in primo piano e
ho imposto che all'evento "Application.Deactivate" l'applicazione si
riprenda il focus con il comanfdo "Application.BringToFront", in questo modo
anche se un utente preme il tasto del menu' avvio o una combinazione di
tasti tipo ALT+TAB la mia applicazione riprende immediatamente il
controllo...a me sembra funzionare bene, secondo voi potrebbero esserci
scappatoie?
Il CTRL+ALT+CANC l'ho risolto con la RegisterServiceProcess visto che il
computer in questione sara' un Win98.
GRAZIE! :)

 la guida Win32, dovrebbe essere proprio cosi'...
Infatti! Non hai sbagliato nulla ... semplicemente le api di windows,
secondo il mio modesto
parere... sono un po' "stupide" ... nel senso che, forse per motivi di
ottimizzazione, raramente
conoscono la dimensione dei dati che dovranno riempire... cosě si fanno
passare le dimensioni
delle strutture.
Ciao. Davide DG.




 delle strutture.
    Non sono stupide, ma anzi sono intelligenti. Il campo Size serve per la
retro - compatibilità delle API. Ogni tanto M$ rilascia nuove DLL (vedi
ComCtrl32) e anche se al loro interno ci sono sempre le stesse funzioni,
queste presumibilmente lavorano con strutture dati diverse ( vengono
aggiunti o tolti campi dalle strutture). Se M$ si limitasse a fare questi
cambiamenti, immaginati a passare alle nuove funzioni strutture dati che non
vanno bene, succederebbe un macello. L'API invece analizza il campo size e
da quello determina il tipo di struttura che gli è stata passata e
restituisce i dati necessari all'applicazione, continuando ad essere
compatibile all'indietro, ma se qualcuno gli passa la struttura di ultima
versione, ecco che restituirà i nuovi parametri.
    Saluti!
______________________________________
Gian Luca Dalla Torre
E - Mail: 
gianluca....@casteo.net
______________________________________

>     Non sono stupide, ma anzi sono intelligenti.
ahhhhnnnn ... qualcosa di "intelligente" prodotto da MicroBorg ?!
Mah... io rimango fedele al primo postulato : "Se č M$, non funziona!" ...
ehhč, :)
Ciao, Davide DG
(ps, cmq ho capito!!)

Hello Matteo.
01 May 00 19:28, you wrote to All:
 MM> Mi piacerebbe avere un giudizio, anche negativo ma costruttivo.
 MM> Ogni consiglio è ben accetto.
a) in win e' possibile, ma  con altri S.O. multitasking tipo Linux ?
b) che razza di colleghi di lavoro hai ?
c) non era meglio metter una password e spegnere il PC a paranzo ?
Filippo