PDA

Visualizza la versione completa : [*] Creare un processo "critico"


emalag
01-02-2007, 16:14
Salve a tutti.
Ho creato un programma che fa dei controlli sul sistema e lo devo rendere non terminabile dall'utente (ad esempio da task manager).
Premetto che non possibile fare un servizio ma deve essere per forza una normale applicazione.
Ad esempio smss.exe, csrss.exe, winit.exe, logonui.exe, lsass.exe, services.exe, winlogon.exe, System, svchost.exe sono riconosiuti come processi critici di sistema e non possono essere terminati.

Come faccio a rendere un mio processo critico?

L'unica cosa che ho trovato inerente ai processi critici questo articolo della microsoft (http://msdn2.microsoft.com/en-us/library/aa373646.aspx) ma sembra che serva solo a vedere se un processo e critico o no, e inoltre sembra che si riferisca solo ai servizi. O sbaglio? E in ogni caso non ho capito come si usa!

alka
03-02-2007, 03:30
Il linguaggio? Hai letto il Regolamento (http://forum.html.it/forum/showthread.php?s=&threadid=973887)?

emalag
03-02-2007, 11:00
Ho letto il regolamento e non ho messo il linguaggio perch va bene una risposta in un qualsiasi linguaggio!
Visto che a quanto pare nessuno sa come fare non mi sembrava il caso di cercare la risposta in un determinato linguaggio.

oregon
03-02-2007, 11:21
La questione e' che non si puo' fare quanto chiedi.

Il Task Manager indica alcuni come "processi critici" soltanto perche' esso, come applicazione, ne legge il nome e decide che fanno di un elenco di processi da non chiudere, non perche' tali processi abbiano qualcosa in particolare.

Questo e' dimostrato dal fatto che un altro programma come ProcExplorer (sysinternals) chiude *anche* questi processi "critici" a volte generando finanche un BSOD ... E puoi fare anche la prova chiamando un tuo programma scritto in VB

csrss.exe

Quando lo esegui, il Task Manager non te lo fa chiudere ... e non ha nulla di particolare ...

L'unica cosa che evita la terminazione di un processo e' il fatto che il contesto di sicurezza in cui gira tale processo e' "piu' alto" rispetto a quello del processo che lo vuole chiudere.
Per fare in modo che il tuo processo possa girare sotto un contesto di sicurezza tanto elevato da non potere essere terminato da un utente, devi creare un *servizio* e fallo girare sotto il contesto "LocalSystem".

L'articolo a cui hai fatto riferimento riguarda un sistema (il Restart Manager) che si occupa del riavvio dei servizi quando questi (o processi che dipendono da loro) devono essere aggiornati. E' un sistema legato ai meccanismi di installazione che saranno operativi sui prossimi sistemi operativi. E' infatti indicato che i requirements sono

Client: Requires Windows Vista.
Server: Requires Windows Server "Longhorn".

emalag
03-02-2007, 11:31
Grazie mille Oregon!

Pensavo ci fosse sotto qualche API o qualche comando da lanciare... e che windows fosse pi intelligente!
Per quello che devo fare io mi sar sufficiente dargli un nome di un processo riconosciuto come "critco".

oregon
03-02-2007, 11:40
Non e' una questione di "intelligenza" ... l'architettura di sicurezza del sistema operativo prevede i "contesti di sicurezza" ... task manager che "stupido" ...

Se tu utilizzi un nome di processo critico, eviti che possa essere chiuso da Task Manager, ma non tramite altri tool.

alka
03-02-2007, 15:30
Originariamente inviato da emalag
Ho letto il regolamento e non ho messo il linguaggio perch va bene una risposta in un qualsiasi linguaggio!
Il fatto che qualsiasi linguaggio vada bene non un motivo per non indicare questa condizione, sollevando me dal compito di dover accertare se l'hai dimenticato o se vanno bene tutti.

Poi, visto che hai postato in un sottoforum specifico, dedicato a VB6 e .NET Framework...

A questo punto, sposto nel forum generico di Programmazione.

Loading