| |
|
|
| KompilierenMarcaSeparaciónSource wurde am 15.07.2007 aus der MMJ-Quellcodesammlung (Dietmar Horn) in die Babyklappe auf XProfan.Com abgelegt:
Rechner nach bestimmter Zeit herunterfahren und Message ausgeben
Diese Funktion gibt es nur unter NT-basierten Windowssystemen.
Def @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
|
|
|
| |
|
|