| |
|
|
|
Beschreibung:
InitiateSystemShutdown fährt den Rechner nach einem Zeitintervall herunter und gibt dabei eine Message aus. Diese Funktion gibt es nur unter NT-basierten Windowssystemen.
Deklaration:
DEF @InitiateSystemShutdown(5) !ADVAPI32,InitiateSystemShutdownA
Parameter:
1.Parameter: Adresse eines Strings oder Bereichsvariable mit einem String,, der den Computernamen des herunterzufahrenden Systems enthält. Ist dieser Parameter ein Leerstring oder 0, wird das aktuelle System heruntergefahren. 2.Parameter: Adresse eines Strings oder Bereichsvariable mit einem String,, der eine Message enthält, die beim Herunterfahren angezeigt werden soll. Dieser Parameter kann 0 sein. 3.Parameter: Zeit bis zum Herunterfahren des Rechners in Sekunden als LongInt. 4.Parameter: Flag, der angibt ob alle Anwendungen mit dem Herunterfahren einverstanden sein müssen.=> 1 = Ohne Nachfrage herunterfahren. 0 = Herunterfahren abbrechen, wenn eine Anwendung nicht ihr OK gibt. Um Rechner überhaupt herunterfahren zu können, müssen die Privilegien SeShutdownPrivilege und SeRemoteShutdownPrivilege vorhanden sein und aktiviert werden. 5.Parameter: Flag, der angibt ob nach dem Herunterfahren ein Neustart des Rechners erfolgen soll.=> 1 = Neustart 0 = Nur herunterfahren
Rückgabewert:
1 Bei Erfolg, 0 bei einem Fehler.
Beispiele:
KompilierenMarkierenSeparierenDEF @InitiateSystemShutdown(5) !"ADVAPI32","InitiateSystemShutdownA"
DEF @LookupPrivilegeName(4)!"advapi32","LookupPrivilegeNameA“
DEF @LookupPrivilegeValue(3) !"advapi32","LookupPrivilegeValueA"
DEF @OpenProcessToken(3) !"advapi32","OpenProcessToken"
DEF @AdjustTokenPrivileges(6) !"advapi32","AdjustTokenPrivileges”
DEF @GetCurrentProcess(0) !"kernel32","GetCurrentProcess"
DEF @CloseHandle(1) !"kernel32","CloseHandle“
Declare Message$,TIME&,NewState#,token#,System$
Declare Privileg#,Luid#
dim token#,4
DIM NewState#,16
DIM Luid#,8
DIM Privileg#,256
Long NewState#,0=1 Nur ein Privileg soll geändert werden
Long NewState#,12=$00000002 Das Privileg soll eingeschaltet werden
Print @OpenProcessToken(@GetCurrentProcess(),$0020 | $0008,Token#)
STRING Privileg#,0="SeShutdownPrivilege"
Print @LookupPrivilegeValue(0,Privileg#,LUID#)
Byte NewState#,4=@Byte(Luid#,0)
Byte NewState#,5=@Byte(Luid#,1)
Byte NewState#,6=@Byte(Luid#,2)
Byte NewState#,7=@Byte(Luid#,3)
Byte NewState#,8=@Byte(Luid#,4)
Byte NewState#,9=@Byte(Luid#,5)
Byte NewState#,10=@Byte(Luid#,6)
Byte NewState#,11=@Byte(Luid#,7)
Print @AdjustTokenPrivileges(@LONG(Token#,0),0,NewState#,0,0,0)
Long NewState#,0=1 Nur ein Privileg soll geändert werden
Long NewState#,12=$00000002 Das Privileg soll eingeschaltet werden
Print @OpenProcessToken(@GetCurrentProcess(),$0020 | $0008,Token#) Es wird ein Process mit dem Handle Token gestartet, der Privilegien für mein Programm einstellen soll.
STRING Privileg#,0="SeRemoteShutdownPrivilege"
Print @LookupPrivilegeValue(0,Privileg#,LUID#)
Byte NewState#,4=@Byte(Luid#,0)
Byte NewState#,5=@Byte(Luid#,1)
Byte NewState#,6=@Byte(Luid#,2)
Byte NewState#,7=@Byte(Luid#,3)
Byte NewState#,8=@Byte(Luid#,4)
Byte NewState#,9=@Byte(Luid#,5)
Byte NewState#,10=@Byte(Luid#,6)
Byte NewState#,11=@Byte(Luid#,7)
Print @AdjustTokenPrivileges(@LONG(Token#,0),0,NewState#,0,0,0)
LET TIME&=60
LET Message$="Der Rechner wird neu gestartet!"
Print @InitiateSystemShutdown(@ADDR(System$),@ADDR(Message$),TIME&,1,1)
@CloseHandle(@LONG(Token#,0))
Dispose Luid#
Dispose Privileg#
Dispose NewState#
Dispose token#
Waitinput
[keywords:21d2f6baf0] Herunterfahren Shutdown Dialog Message Zeit Zeitintervall Warnung [/keywords:21d2f6baf0] |
|
|
| |
|
|