are there functions to reboot, logoff, and shutdown a box in win 2k and xp
Printable View
are there functions to reboot, logoff, and shutdown a box in win 2k and xp
Look up ExitWindowsEx or InitiateSystemShutdown.
This code correctly shutsdown the machine on NT/2k/XP, other code displays the "Your Computer is now safe to turn off" screen:D
VB Code:
'Used by ShutdownWindowsNT Private Declare Function ExitWindowsEx Lib "User32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long Private Declare Function GetCurrentProcess Lib "kernel32" () As Long Private Declare Function OpenProcessToken Lib "advapi32" (ByVal _ ProcessHandle As Long, _ ByVal DesiredAccess As Long, TokenHandle As Long) As Long Private Declare Function LookupPrivilegeValue Lib "advapi32" _ Alias "LookupPrivilegeValueA" _ (ByVal lpSystemName As String, ByVal lpName As String, lpLuid _ As LUID) As Long Private Declare Function AdjustTokenPrivileges Lib "advapi32" _ (ByVal TokenHandle As Long, _ ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES _ , ByVal BufferLength As Long, _ PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long Private Const EWX_FORCE As Long = 4 Private Type LUID UsedPart As Long IgnoredForNowHigh32BitPart As Long End Type Private Type TOKEN_PRIVILEGES PrivilegeCount As Long TheLuid As LUID Attributes As Long End Type Public Enum EnumExitWindows WE_LOGOFF = 0 WE_SHUTDOWN = 1 WE_REBOOT = 2 WE_POWEROFF = 8 End Enum Public Function ShutdownWindowsNT(ShutdownType As Integer) '1 = ATX power off '2 = Shutdown '3 = Restart '4 = Logoff '******* Adjust Priviliage for NT/Win2k/XP ******** 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", tmpLuid tkp.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 hdlTokenHandle, False, _ tkp, Len(tkpNewButIgnored), tkpNewButIgnored, lBufferNeeded If ShutdownType = 1 Then ExitWindowsEx (WE_POWEROFF Or EWX_FORCE), 0 If ShutdownType = 2 Then ExitWindowsEx (WE_SHUTDOWN Or EWX_FORCE), 0 If ShutdownType = 3 Then ExitWindowsEx (WE_REBOOT Or EWX_FORCE), 0 If ShutdownType = 4 Then ExitWindowsEx (WE_LOGOFF Or EWX_FORCE), 0 End Function
Would the code work for win98se?
Quote:
Originally posted by Spiv
This code correctly shutsdown the machine on NT/2k/XP, other code displays the "Your Computer is now safe to turn off" screen:D
VB Code:
'Used by ShutdownWindowsNT Private Declare Function ExitWindowsEx Lib "User32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long Private Declare Function GetCurrentProcess Lib "kernel32" () As Long Private Declare Function OpenProcessToken Lib "advapi32" (ByVal _ ProcessHandle As Long, _ ByVal DesiredAccess As Long, TokenHandle As Long) As Long Private Declare Function LookupPrivilegeValue Lib "advapi32" _ Alias "LookupPrivilegeValueA" _ (ByVal lpSystemName As String, ByVal lpName As String, lpLuid _ As LUID) As Long Private Declare Function AdjustTokenPrivileges Lib "advapi32" _ (ByVal TokenHandle As Long, _ ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES _ , ByVal BufferLength As Long, _ PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long Private Const EWX_FORCE As Long = 4 Private Type LUID UsedPart As Long IgnoredForNowHigh32BitPart As Long End Type Private Type TOKEN_PRIVILEGES PrivilegeCount As Long TheLuid As LUID Attributes As Long End Type Public Enum EnumExitWindows WE_LOGOFF = 0 WE_SHUTDOWN = 1 WE_REBOOT = 2 WE_POWEROFF = 8 End Enum Public Function ShutdownWindowsNT(ShutdownType As Integer) '1 = ATX power off '2 = Shutdown '3 = Restart '4 = Logoff '******* Adjust Priviliage for NT/Win2k/XP ******** 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", tmpLuid tkp.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 hdlTokenHandle, False, _ tkp, Len(tkpNewButIgnored), tkpNewButIgnored, lBufferNeeded If ShutdownType = 1 Then ExitWindowsEx (WE_POWEROFF Or EWX_FORCE), 0 If ShutdownType = 2 Then ExitWindowsEx (WE_SHUTDOWN Or EWX_FORCE), 0 If ShutdownType = 3 Then ExitWindowsEx (WE_REBOOT Or EWX_FORCE), 0 If ShutdownType = 4 Then ExitWindowsEx (WE_LOGOFF Or EWX_FORCE), 0 End Function