Newsgroup: it.comp.lang.visual-basic
Titolo: Protezione programmi in NT .

Salve a tutti ,
qualcuno sa dirmi se esiste un meccanismo
di protezione in Visual Basic per impedire
che dal Task Manager di Windows NT
si possa "uccidere" un programma ( generato
tramite VB ovviamente ) ?
Ovverosia , in modo che al tentativo ,
compaia la stessa scritta che compare
per i processi che girano
in modalità protetta ( quelli del kernel per intenderci ) ?
Saluti .

Salve a tutti ,
qualcuno sa dirmi se esiste un meccanismo
di protezione in Visual Basic per impedire
che dal Task Manager di Windows NT
si possa "uccidere" un programma ( fatto


 ha scritto nel messaggio
news:Lp4P7.235627$sq5.11...@news.infostrada.it...

che io sappia non si può; poi, con gli opportuni privilegi è possibile
terminare qualunque tipo di processo, servizio o meno...
massimo che puoi fare è far diventare il tuo programma un servizio, così
ti metti 'sullo stesso piano' degli altri lanciati da services.exe
Faber

in modalità protetta ( quelli del kernel per intenderci ) ?
Potresti installarlo come servizio.
In questo modo, solo chi ha poteri adeguati sulla macchina 
(come gli amministratori, ad esempio) puo' fermare il servizio
dall' applet di gestione dei servizi.
Ovviamente, tieni presente che, affinche' funzioni come servizio
occorre interfacciare il programma vb con il sistema tramite un
eseguibilino in scritto in C (o C++ o Pascal, non so Delphi) oppure
impiegare un apposito ocx di cui si e' gia' parlato diverse volte
sul newsgroup (ntsvc.ocx o qualcosa di simile).
-- 
ciao, hal

! Mi ricordo di te. E come dimenticarti, del 
resto? Non sei per caso quello che mar 04 dic 2001 04:32:45p, su 
it.comp.lang.visual-basic, ha scritto:

Qualche precisazione sulla cosiddetta "protezione" di alcuni programmi:
 - il task manager (quello di Windows 2000) si rifiuterà di terminare i
   seguenti processi:
    - services.exe
    - winlogon.exe
    - csrss.exe
    - smss.exe
   qualsiasi sia il loro reale grado di protezione
 - il task manager di NT (e così la maggior parte dei suoi cloni) non
   fanno alcun tentativo di forzare la chiusura dei processi: ci
   provano, se non ci riescono pazienza. Ad esempio, i servizi non
   possono essere terminati. Alcuni programmi più tenaci, in caso di
   fallimento, aprono l'oggetto corrispondente al processo, e cercano di
   modificarne l'ACL in modo da garantirsi il diritto di terminarlo.
   Quasi sempre, da account Administrator, funziona. E' possibile usare
   anche Task Manager per lo scopo, semplicemente facendolo girare con
   permessi illimitati, ossia avviandolo come servizio (ne ho già
   parlato in passato, magari un giorno mi deciderò a formalizzare la
   procedura in un articolo)
 - alcuni processi ricevono un trattamento speciale. csrss.exe non può
   essere MAI terminato: TerminateProcess risponde addirittura di non
   aver trovato il processo. Ma con apposita funzione del kernel anche
   questo è possibile. smss.exe è anch'esso immune alla terminazione. Ma 
   l'errore stavolta è di accesso negato, quindi forse si fa sul serio
 - infine, due processi (Idle e System) in realtà non sono processi, e
   non possono essere terminati perchè semplicemente non avrebbe senso
Ripercorriamo a ritroso il tutto per trovarti una soluzione:
 - scrivi un driver. Al suo avvio crea un nuovo thread, rimarrà
   permanentemente in esecuzione nel contesto del processo System
   (altrimenti, a parte l'entry point, tutte le procedure del driver
   verrebbero eseguite nel contesto del processo chiamante - che non
   potrebbe comunque essere terminato in attesa di ritornare da una
   syscall, ma nemmeno nel frattempo potrebbe fare niente di utile)
 - fatti eseguire da smss.exe o da csrss.exe nel loro contesto.
   Praticamente senza speranza: nessuno dei due carica dll
   dinamicamente. Li si potrebbe forzare a farlo, ma qui siamo proprio a 
   livelli fantascientifici
 - un servizio. Un semplicissimo servizio con accesso al desktop
   dell'utente. Possibilissimo in VB, esistono fior di componenti per lo
   scopo. Ma un utente ben determinato potrebbe fartelo fuori lo stesso
 - chiama l'eseguibile con uno di questi nomi:
    - services.exe
    - winlogon.exe
    - csrss.exe
    - smss.exe
   Quel tonto del task manager di Windows 2000 non oserà nemmeno
   toccarlo (provare per credere!)
Altra soluzione è impostare il tuo programma come shell dell'utente: se 
lo termini bang! schermo vuoto, game over
Ma non è finita qui! Puoi ancora ricorrere alla sempreverde castrazione:
 - rimuovi il task manager. Cancellalo. Rinominalo. Cambia i permessi in
   modo che solo tu possa eseguirlo
 - usa le policy. Se è Windows 2000, sono state notevolmente potenziate.
   Disattiva tutti quegli stupidi tasti nella finestra del
   CTRL+ALT+CANC. Disattiva gli inutili task manager e regedit.
   Disattiva l'esecuzione di qualsiasi cosa non sia il tuo programma.
   Rendi obbligatorio il profilo dell'utente: qualsiasi cosa combini, al
   login successivo si ritroverà al punto di partenza
 - nessun utente ha bisogno sia del tasto CTRL sia del tasto ALT, dico
   bene? Se proprio hanno bisogno del tasto ALT GR, credo proprio che
   ESC e CANC andranno a farsi un giro. Inoltre, i tasti funzione sono
   inutili, stacca pure quelli
-- 
Nato nel vizio, morto nel supplizio
Nato nel peccato, ad entrare sia invitato