EWX_FORCE est un entier = 4 // Force any applications to quit instead of prompting the user to close them.
EWX_LOGOFF est un entier = 0 // Arrête les services du réseaux (logout)
EWX_POWEROFF est un entier = 8 //Eteindre le système et si possible l'ordinateur.
EWX_REBOOT est un entier = 2 // Redémarrage du système.
EWX_SHUTDOWN est un entier = 1 //Arrêter le système
Token_Adjust_Privilege est un entier = 0x20
Token_Query est un entier = 0x8
Se_Privilege_enabled est un entier = 0x2
LUID est une structure
UsedPart est un entier
IgnoredFor est un entier
FIN
TOKEN_PIVILEGE est une structure
PrivilegeCount est un entier
Luid est une chaîne fixe sur 8
Attributes est un entier
FIN
hdlProcessHandle est un entier
hdlTokenHandle est un entier
tmpLuid est un LUID
tkp est un TOKEN_PIVILEGE
tkpNewButIgnored est un TOKEN_PIVILEGE
cbNeeded est un entier
Res est un entier
dTypeShutdown est un entier
SI TYPE = "REBOOT" ALORS
dTypeShutdown = EWX_REBOOT
SINON
dTypeShutdown = EWX_POWEROFF
FIN
// détermination de la version du system
:GetVersionEx()
SI Gauche(:szSystem,1) = "W" ALORS // version win 9x
Res = AppelDLL32("user32","ExitWindowsEx",dTypeShutdown ,0)
SI Res = 0 ALORS
RENVOYER(Faux)
SINON
FinProgramme()
FIN
FIN
SI Gauche(:szSystem,2) = "NT" ALORS // version NT et supérieur
hdlProcessHandle = AppelDLL32("kernel32","GetCurrentProcess" )
AppelDLL32("advapi32.dll","OpenProcessToken",hdlProcessHandle, ...
OUBinaire(Token_Adjust_Privilege,Token_Query),&hdlTokenHandle)
AppelDLL32("advapi32.dll","LookupPrivilegeValueA" ,"","SeShutdownPrivilege",&tmpLuid)
tkp:PrivilegeCount = 1
Transfert(&tkp:Luid,&tmpLuid,Dimension(tmpLuid))
tkp:Attributes = Se_Privilege_enabled
AppelDLL32("advapi32.dll","AdjustTokenPrivileges" ,hdlTokenHandle,...
Faux,...
&tkp,...
Dimension(tkpNewButIgnored),...
&tkpNewButIgnored,...
&cbNeeded)
AppelDLL32("user32","ExitWindowsEx" ,OUBinaire(dTypeShutdown,EWX_FORCE), 0xFFFF)
FinProgramme()
FIN
Cette contribution était de : http://old.wdforge.org/newbb/viewtopic.php?forum=12&topic_id=804&post_id=3197