Results 1 to 4 of 4

Thread: windows shutdown

  1. #1
    Guest

    Lightbulb

    Does anyone know how to shutdown windows (NT) from code?

  2. #2
    Junior Member
    Join Date
    Oct 2000
    Posts
    18

    Here is a bunch of NT goodies.

    Code:
    'API constants
    Private Const EWX_LOGOFF = 0
    Private Const EWX_SHUTDOWN = 1
    Private Const EWX_REBOOT = 2
    Private Const EWX_FORCE = 4
    Private Const TOKEN_ADJUST_PRIVILEGES = &H20
    Private Const TOKEN_QUERY = &H8
    Private Const SE_PRIVILEGE_ENABLED = &H2
    Private Const ANYSIZE_ARRAY = 1
    Private Const VER_PLATFORM_WIN32_NT = 2
    
    'API structures
    Type OSVERSIONINFO
        dwOSVersionInfoSize As Long
        dwMajorVersion As Long
        dwMinorVersion As Long
        dwBuildNumber As Long
        dwPlatformId As Long
        szCSDVersion As String * 128
    End Type
    Public Type LUID
        LowPart As Long
        HighPart As Long
    End Type
    Public Type LUID_AND_ATTRIBUTES
        pLuid As LUID
        Attributes As Long
    End Type
    Public Type TOKEN_PRIVILEGES
        PrivilegeCount As Long
        Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
    End Type
    
    'API Declarations
    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 Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, _
         ByVal dwReserved As Long) As Long
    Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" _ 
         (ByRef lpVersionInformation As OSVERSIONINFO) As Long
    
    '<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
    '   IsWinNT() - Detect if the program is running under Windows NT
    '<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
    Public Function IsWinNT() As Boolean
        Dim myOS As OSVERSIONINFO
        myOS.dwOSVersionInfoSize = Len(myOS)
        GetVersionEx myOS
        IsWinNT = (myOS.dwPlatformId = VER_PLATFORM_WIN32_NT)
    End Function
    '<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
    '   EnableShutDown() - Set the shut down privilege for the current application
    '<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
    Private Sub EnableShutDown()
        Dim hProc As Long, hToken As Long, mLUID As LUID, mPriv As TOKEN_PRIVILEGES, mNewPriv As TOKEN_PRIVILEGES
        hProc = GetCurrentProcess()
        OpenProcessToken hProc, TOKEN_ADJUST_PRIVILEGES + TOKEN_QUERY, hToken
        LookupPrivilegeValue "", "SeShutdownPrivilege", mLUID
        mPriv.PrivilegeCount = 1
        mPriv.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
        mPriv.Privileges(0).pLuid = mLUID
        ' enable shutdown privilege for the current application
        AdjustTokenPrivileges hToken, False, mPriv, 4 + (12 * mPriv.PrivilegeCount), mNewPriv, 4 + (12 * mNewPriv.PrivilegeCount)
    End Sub
    '<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
    '   ShutDownNT() - Shut Down NT
    '<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
    Public Sub ShutDownNT(Force As Boolean)
        Dim ret As Long, Flags As Long
        Flags = EWX_SHUTDOWN
        If Force Then Flags = Flags + EWX_FORCE
        If IsWinNT Then EnableShutDown
        ExitWindowsEx Flags, 0
    End Sub
    '<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
    '   RebootNT() - Restart NT
    '<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
    Public Sub RebootNT(Force As Boolean)
        Dim ret As Long, Flags As Long
        Flags = EWX_REBOOT
        If Force Then Flags = Flags + EWX_FORCE
        If IsWinNT Then EnableShutDown
        ExitWindowsEx Flags, 0
    End Sub
    '<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
    '   LogOffNT() - Log off the current user
    '<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
    Public Sub LogOffNT(Force As Boolean)
        Dim ret As Long, Flags As Long
        Flags = EWX_LOGOFF
        If Force Then Flags = Flags + EWX_FORCE
        ExitWindowsEx Flags, 0
    End Sub
    Hope this helps!

  3. #3
    Guest
    Code:
    Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
    Private Const EWX_POWEROFF = &H8
    
    Private Sub Command1_Click()
        ExitWindowsEx EWX_POWEROFF, 0
    End Sub

  4. #4
    Guru Yonatan's Avatar
    Join Date
    Apr 1999
    Location
    Israel
    Posts
    892
    Megatron, that doesn't work in NT. (Clickable smily)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width