1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| ; ### !Brouillon! ###
; ## Auteur : sirlifang ##
; ## 2008-06-06 ##
; ## source : http://en.verysource.com
; ## Simple, mais plutot radical.
; ## J'ai ajouté la solution InitiateSystemShutdown qui est documenté (msdn)
;
;# Un utilisateur n'a pas les privilèges pour arrêter le système
;# on utilise la fonction "RtlAdjustPrivilege" pour avoir les
;# privilèges uniquement sur une SEUL des 2 fonctions "shutdown"
;
.386
.model flat,stdcall
option casemap:none
include masm32includew2kntddk.inc
include masm32includew2kntdll.inc
includelib masm32libw2kntdll.lib
.code
Main proc
LOCAL bTemp
;
;## API RtlAdjustPrivilege de ntdll.dll
; Active ou non le privilège du processus "X"
; A partir de W2K. Sources :
; Liste MSDN privilège constant... mais sans les noms :(
; msdn.microsoft.com/en-us/library/windows/hardware/ff562046%28v=vs.85%29.aspx
; Liste les noms de privilèges
; msdn.microsoft.com/en-us/library/cc234419.aspx
; 1) Valeur = Privilège pour SE_SHUTDOWN_PRIVILEGE
; 2) = Boolean (! 0) = SE_PRIVILEGE_ENABLED
; 3) Boolean = (! 0) thread ou processus (0)
; Retour = Activé ou désactivé (?!?)
;
invoke RtlAdjustPrivilege,SE_SHUTDOWN_PRIVILEGE,TRUE,FALSE,addr bTemp
; Fermer W2k/WXP pour reboot
; 2 alternatives :
; 1- ZwShutdownSystem (W2K,XP)
; API non documenté chez Microsoft !
; fonction de la bibliothèque ntdll (?)
invoke ZwShutdownSystem,2
; fermeture applis redémarrage Windows (XP)
; 2- InitiateSystemShutdown
; Fonction redémarrage
; lpMachineName=0= machine local
; lpMessage=0 ; aucun message
; dwTimeout=0 ; si zéro pas de boite de dialogue
; bForceAppsClosed=TRUE= fermer applis de force, risque de perte de données
; bRebootAfterShutdown= FALSE; vide cache et enregistre sur DD
; TRUE ; redémarrer après l'arrêt système
; Résultat retour fonction dans eax ; si eax = 0 = erreur, si eax != 0 Ok!
invoke InitiateSystemShutdown, 0, 0, 0, TRUE, FALSE
Main endp
end Main |
Partager