Newsgroup: it.comp.programmare.win32
Titolo: Funzione per arrestare il sistema

Quale funzione posso usare per arrestare il sistema chiudendo tutte le
eventuali applicazioni aperte?
Grazie.
Enrico



Guarda la API ExitWindowsEx
Stefano "HappyMan" (Lago Maggiore - NO)
--
Personal Web 
http://www.sgr.info
Email happyman69 (at) 
despammed.com

 ha scritto:

Io ti consiglio la InitiateSystemShutdown che è migliore e funziona!
In passato con la Exit... ho avuto solo problemi.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 ha scritto nel messaggio
news:62Z211Z222Z9Y1...@usenet.libero.it...



perfetto, ma solo su sistemi NT (niente 9x/ME)
--
Pela

Ho provato InitiateSystemShutdown(0, NULL, 0, true,
false);  , ma non funziona.
Provando
 ExitWindowsEx(EWX_SHUTDOWN|EWX_FORCEIFHUNG, 0xFFFFFFFF)
mi dice  EWX_FORCEIFHUNG undeclared identifier
Con ExitWindowsEx(EWX_SHUTDOWN, 0xFFFFFFFF)  non funziona
ExitWindow(NULL, NULL); e  ExitWindowsEx(EWX_LOGOFF, 0xFFFFFFFF); mi
disconnettono solo l'utente.
Ho fatto le prove su WinXp.
Dove sbaglio?
Grazie 1000
Enrico



Non le ho mai usate quindi non ti so dire, pero' in generale quando
una API non si comporta come ci si aspetta di regola si deve
verificare il valore ritornato (ExitWindowsEx per esempio ritorna un
boolean) e nel caso cercare l'errore con la GetLastError, formattando
il messaggio con FormatMessage (come descritto proprio nella
descrizione della API FormatMessage).


 descrizione della API FormatMessage).
esagggeraaato...
imho EWX_FORCEIFHUNG non funzia xké bisogna definire qualche macro tipo
WINVER (è un flag che va solo su Windows NT 5.0 alias Windows 2000), e cmq
nn c'è bisogno di usarlo; a che gli serve forzare le applicazioni? da
quanto ho capito gli interessa fare lo shutdown, non spegnere brutalmente
il pc (nel qual caso potrebbe usare un trucchetto più sporco, ad es.
mandare qualcosa direttamente sul driver della scheda madre :D ...)
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 ExitWindowsEx(EWX_SHUTDOWN|EWX_FORCEIFHUNG, 0xFFFFFFFF)
perché 0xFFFFFFFF ?
l'ultimo parametro è ignorato (almeno secondo mamma microzozz...)


 Grazie 1000
se nn fosse troppo vecchia direi qualcosa come: "Prego 1001" :D
ma forse č troppo vecchia :P


l'ultimo parametro è ignorato (almeno secondo mamma microzozz...)
   E` il `reason code' per XP e 2003.
   Comunque, approfitto per rispondere all'OP: su sistemi basati su NT
bisogna attivare il privilegio SE_SHUTDOWN_NAME, disabilitato per
impostazione predefinita, usando `AdjustTokenPrivileges'.
   Non e` comodissimo, ma spegnere il sistema dovrebbe essere un
evento straordinario.
-- 
S.L.

 impostazione predefinita, usando `AdjustTokenPrivileges'.
giusto hai ragione, l'avevo fatto anch'io a suo tempo, ma me n'ero
scordato; c'è anche nell'esempio MSDN. :)


Vorrei farvi un ultima domanda. Ho scritto il seguente codice:
...
TOKEN_PRIVILEGES privilegi;
 LUID_AND_ATTRIBUTES impostazioni[1];
 LUID *id;
 LookupPrivilegeValue(NULL, SE_SECURITY_NAME, id);
 impostazioni[0].Attributes = SE_PRIVILEGE_ENABLED;
 impostazioni[0].Luid = *id;
 privilegi.PrivilegeCount = 1;
 privilegi.Privileges[0] = impostazioni[0];
AdjustTokenPrivileges(NULL, false, &privilegi, NULL, NULL, NULL);
 ExitWindowsEx(EWX_SHUTDOWN, 0xFFFFFFFF);
...
Perchè non funziona? Forse devo impostare il primo parametro di
AdjustTokenPrivileges, ma dove lo prendo il TokenHandle?
Grazie ancora.
Enrico