'Turn off Win NT
'Needs 1 module and 3 common button
'In a module
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
Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type
Type LUID
LowPart As Long
HighPart As Long
End Type
Type LUID_AND_ATTRIBUTES
pLuid As LUID
Attributes As Long
End Type
Type TOKEN_PRIVILEGES
PrivilegeCount As Long
Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
End Type
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
'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
'set the shut down privilege for the current application
Private Sub EnableShutDown()
Dim hProc, hToken
As Long
Dim mLUID As
LUID
Dim mPriv, 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
' Shut Down NT
Public Sub ShutDownNT(Force
As Boolean)
Dim ret , Flags As Long
Flags = EWX_SHUTDOWN
If Force Then Flags = Flags + EWX_FORCE
If IsWinNT Then EnableShutDown
ExitWindowsEx Flags, 0
End Sub
'Restart NT
Public Sub RebootNT(Force
As Boolean)
Dim ret , Flags
As Long
Flags = EWX_REBOOT
If Force Then Flags = Flags + EWX_FORCE
If IsWinNT Then EnableShutDown
ExitWindowsEx Flags, 0
End Sub
'Log off the current user
Public Sub LogOffNT(Force As Boolean)
Dim ret , Flags
As Long
Flags = EWX_LOGOFF
If Force Then Flags = Flags + EWX_FORCE
If IsWinNT Then EnableShutDown
ExitWindowsEx Flags, 0
End Sub
'In a form
Private Sub Command1_Click()
LogOffNT True
End Sub
Private Sub Command2_Click()
RebootNT True
End Sub
Private Sub Command3_Click()
ShutDownNT True
End Sub
Private Sub Form_Load()
Command1.Caption = "Log Off NT"
Command2.Caption = "Reboot NT"
Command3.Caption = "Shutdown NT"
End Sub
Wednesday, April 29, 2009
Turn-Off Win NT
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment