A shutdown VB module
'Apis Which Handles Shutdown / Restart / Logoff etc ..
Option expedition
Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As LongPrivate Declare Function GetCurrentProcess Lib "kernel32" () As LongPrivate Declare Function OpenProcessToken Lib "advapi32" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As LongPrivate Declare Function LookupPrivilegeValue Lib "advapi32" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As LongPrivate Declare Function AdjustTokenPrivileges Lib "advapi32" _ (ByVal TokenHandle As Long, _ ByVal DisableAllPrivileges As Long, NewState As Token_Privileges_, BYVAL BUFFERLENGTH AS Long, _PREVIOUSTATE AS Token_Privileges, ReturnLength As long AS Long
Private const EWX_FORCE As long = 4
Private Type Luid UsedPart As Long ignoredfornowhigh32bitPart As Longend Type
Private Type Token_Privileges Privilect As Long Theluid As Luid Attributes As LONGEND TYPE
Public Enum EnumExitWindows WE_LOGOFF = 0 WE_SHUTDOWN = 1 WE_REBOOT = 2 WE_POWEROFF = 8End EnumPrivate Sub AdjustToken () Const TOKEN_ADJUST_PRIVILEGES = & H20 Const TOKEN_QUERY = & H8 Const SE_PRIVILEGE_ENABLED = & H2 Dim hdlProcessHandle As Long Dim hdlTokenHandle As Long Dim tmpLuid As LUID Dim tkp As TOKEN_PRIVILEGES Dim tkpNewButIgnored As token_privileges Dim lbufferneeded as long
HDLProcessHandle = getCurrentProcess () openprocessToken HDLProcessHandle, (token_adjust_privileges or _ token_query), HDLTOKENHANDLE
'Get the LUID for shutdown privilege. LookupPrivilegeValue "", "SeShutdownPrivilege", tmpLuidtkp.PrivilegeCount = 1' One privilege to set tkp.TheLuid = tmpLuid tkp.Attributes = SE_PRIVILEGE_ENABLED
'Enable the shutdown privilege in the access token of this process. AdjustTokenprivileges HDLTOKENHANDE, FALSE, _ TKP, LEN (TKPNewButIn, TkpnewButIn
Public Sub EXITWINDOWS (Byval EXITCOMMAND As EnumexitWindows AdjustToken ExitWindowsex (EXITCOMMAND OR EWX_FORCE), 0END SUB
'Calling time as long as this DIM EXITWIN As New ClsshutdownPrivate Sub Cmdrestart_Click () ON Error Resume Next EXITWIN.EXITWINDOWS WE_REBOOTEND SUB
Private Sub Cmdshutdown_Click () on Error Resume Next EXITWIN.EXITWINDOWS WE_POWEROFFEND SUB