Newsgroup: it.comp.lang.delphi
Titolo: ShutDown: SE_SHUTDOWN_NAME

RiSalve a tutti
Sto scrivendo la routine suggerita sull'help di Win32 per ottenere su NT il
"permesso" di eseguire lo shutdown del sistema.
Ad un certo punto devo inserire la costante SE_SHUTDOWN_NAME: qualcuno ha
idea della unit in cui posso trovarla ? Almeno quanto vale ?
Grazie.
Phora
NB Come mai il msg che ho inviato il 10.07 è sparito ? Ho sbagliato qualcosa
nelle regole del gruppo ? Avevo già ricevuto delle risposte più che
sufficienti e ringrazio tutti, ma io non ho mandato nessuna richiesta di
annullare il msg, quindi non capisco ...

>    LPCTSTR lpName, // address of string specifying the privilege <<
    PLUID lpLuid  // address of locally unique identifier
   );
il 2° parametro è semplicemente una stringa, anzi, un puntatore ad una
stringa.
I privilegi corrispondo a cdei LUID mappati dalle costanti  SE_XXX
Quindi, credo che passare un puntatore alla stringa 'SE_SHUTDOWN_NAME'
dovrebbe essere sufficiente.
Bye
A.


Ok, su questo.
Da come l'ho capita io, SE_SHUTDOWN_NAME non è altro che una const che
dovrebbe contenere al suo interno la stringa 'SeShutdownPrivilege' (l'ho
trovato su 
msdn.microsoft.com
 ) però non funziona ... a questo punto mi
rimane il dubbio di non aver capito nulla.
Tu ne sai qualcosa di più ? A me interessa poter dare all'utente la
possibiltà di fare il reboot dopo aver installato alcuni drives residenti
nel SO.
Hai qualche altra dritta ?
Grazie.
Phora

non č che non hai capito...
Lui non vuole una stringa o, peggio che mai, una costante stringa:
lui vuole un PUNTATORE alla stringa.
Quindi, dovresti fate la stessa cosa che hai per passare lpSystemName, che č
dello stesso tipo.
Bye
A.


Già pensato e provato.
Il risultato è sempre lo stesso: non funziona.
Se guardi in windows.pas, la funzione usa solo il 3° parametro come var,
mentre i primi 2 contengono solo le informazioni  per reperire la costante.
La mia chiamata è:
    LookupPrivilegeValue(  pchar( '' ), pchar( 'SeShutdownPrivilege' ), w );
con
    w: TLargeInteger;
Dobe sbaglio ?
Grazie
Phora

> Il risultato è sempre lo stesso: non funziona.
 cioè....?
Bye
A.


Scusa.
Scrivendo il codice suggerito sia su msdn sia nell' WindowAPIHelp, dopo aver
eseguito la  funzione AdjustTokenPrivileges non riesco ad ottenere
ERROR_SUCCESS
Phora

 ERROR_SUCCESS
Pero la compilazione va ed č gia un risultato.
Adesso il problema č cambiato: non sai se il mancato funzionamento dipende
da
un errore nel passaggio di parametri o se qualcos'altro va storto...
vedi se su jedi trovi qualche riferimento.
Bye
A.


Scusa l'immensa ignoranza, ma cos'è jedi (ogicamente a parte quello di
G.Lucas) ?
Grazie
Phora

 ma cos'č jedi
http://www.delphi-jedi.org/
vai&leggi cosě ti rendi conto.
BaiBai
A

 Dobe sbaglio ?
quanto segue funziona (D6, NT)
Saluti
Paolo Arosio
var ...
  prvtkp, tkp: TOKEN_PRIVILEGES;
  len: cardinal;
begin
...
  // Get the LUID for the shutdown privilege.
  if not LookupPrivilegeValue(nil, 'SeShutdownPrivilege',
tkp.Privileges[0].Luid) then
    RaiseLastOSError;    // o RaiseLastWin32Error
  tkp.PrivilegeCount := 1;  // one privilege to set
  tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
  // Get the shutdown privilege for this process.
  if not AdjustTokenPrivileges(hToken, FALSE, tkp, sizeof(prvtkp),
prvtkp, len) then
    RaiseLastOSError;
...
end;


Sono andato e mi sono perso.
In compenso, gira e rigira sono arrivato alla stessa soluzione prospettata
dall'amico Paolo ed ora funziona.
Grazie a tutti dell'aiuto.
Andrea Foresti