СообЧа > База Знаний > Программирование > Visual Basic

Вопрос

Как перезагрузить Windows XP?

Ответ

Private Declare Function ReleaseCapture Lib "user32" () As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd
As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
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 Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" _
    (lpVersionInformation As OSVERSIONINFO) As Long

Private ISOSVERSION As Long
Private OFF_DATE_START As String
Private OFF_TYPE As Integer
Private OFF_ID As Long
Private ICON_TRAY As Boolean

Private Const VER_PLATFORM_WIN32s = 0
Private Const VER_PLATFORM_WIN32_WINDOWS = 1
Private Const VER_PLATFORM_WIN32_NT = 2
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 Type OSVERSIONINFO
    dwOSVersionInfoSize As Long
    dwMajorVersion As Long
    dwMinorVersion As Long
    dwBuildNumber As Long
    dwPlatformId As Long
    szCSDVersion As String * 128
End Type

Private Type LUID
     LowPart As Long
     HighPart As Long
End Type

Private Type LUID_AND_ATTRIBUTES
     pLuid As LUID
     Attributes As Long
End Type

Private Type TOKEN_PRIVILEGES
     PrivilegeCount As Long
     Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
End Type

Private Function OSVERSION() As Long
    'Определение винды
    Dim info As OSVERSIONINFO
    
    info.dwOSVersionInfoSize = Len(info)
    GetVersionEx info
       
If (info.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS And infoinfo.dwMinorVersion >=
10 And info.dwMajorVersion = 4) Then
       OSVERSION = 1 '98
    ElseIf (info.dwPlatformId = VER_PLATFORM_WIN32_NT) Then
       OSVERSION = 2 '2000/XP
    Else
       OSVERSION = 0 'ERROR
    End If
   
End Function

Private Sub EnableShutDown()
     'Привилегии…
     Dim hProc As Long
     Dim hToken As Long
     Dim mLUID As LUID
     Dim mPriv As TOKEN_PRIVILEGES
     Dim 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

Private Sub SHUTDOWNME()
    'Сама процедура перезагрузки
    '
    'OFF_TYPE — флаг действа (1-выкл/2-перезагруз)
    If OFF_TYPE <> 0 Then
       If ISOSVERSION = 2 Then
          'NT
          EnableShutDown
          DoEvents
       End If
       ExitWindowsEx OFF_TYPE, 0&
    End If
   
    End
    
End Sub

Ivan Rozhuk



Copyright © 2000-2004 Сообщество Чайников
Контактная информация