title image


Smiley geht so
Hab das mal irgendwo gefunden.







      

Option Explicit

' Windows-Version

' für den Aufruf der GetVersionEx-Funktion

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 Declare Function GetVersionEx Lib "Kernel32" _

  Alias "GetVersionExA" (lpVersionInformation As _

  OSVERSIONINFO) As Long



'System beenden + neu starten

Private Declare Function ExitWindowsEx Lib "user32" _

  (ByVal uFlags As Long, ByVal dwReserved As Long) As Long



Public Enum EWX_ACTION

  EWX_LOGOFF = 0

  EWX_SHUTDOWN = 1

  EWX_REBOOT = 2

  EWX_FORCE = 4

  EWX_POWEROFF = 8

End Enum



'Für Windows NT/2000

Private Const ANYSIZE_ARRAY = 1



Private Type LARGE_INTEGER

  lowpart As Long

  highpart As Long

End Type



Private Type LUID_AND_ATTRIBUTES

  pLuid As LARGE_INTEGER

  Attributes As Long

End Type



Private Type TOKEN_PRIVILEGES

  PrivilegeCount As Long

  Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES

End Type



Private Const TOKEN_ADJUST_PRIVILEGES = 32

Private Const TOKEN_QUERY = 8

Private Const SE_PRIVILEGE_ENABLED As Long = 2



Private Declare Function LookupPrivilegeValue Lib _

  "advapi32.dll" Alias "LookupPrivilegeValueA" _

  (ByVal lpSystemName As String, ByVal lpName As _

  String, lpLuid As LARGE_INTEGER) As Long



Private Declare Function GetCurrentProcess Lib _

  "Kernel32" () As Long



Private Declare Function AdjustTokenPrivileges Lib _

  "advapi32.dll" (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 OpenProcessToken Lib _

  "advapi32.dll" (ByVal ProcessHandle As Long, _

  ByVal DesiredAccess As Long, TokenHandle As Long) _

  As Long

  

Public time As Long





'System herunterfahren (ohne Neustart)

'RebootSystem EWX_SHUTDOWN



'Aktuellen Benutzer abmelden

'RebootSystem EWX_LOGOFF

'System herunterfahren/neu starten

'oder aktuellen Benutzer abmelden

Public Function RebootSystem(ByVal Action As EWX_ACTION) _

  As Boolean



  Dim ret As Long

  Dim hToken As Long

  Dim tkp As TOKEN_PRIVILEGES

  Dim tkpOld As TOKEN_PRIVILEGES

  Dim fOkReboot As Boolean

  Const sSHUTDOWN As String = "SeShutdownPrivilege"

  

  If IsWindowsNT() Then

    ' Windows NT wird ausgeführt.

    ' Sicherheitsüberprüfungen und

    ' Veränderungen sind jetzt notwendig,

    ' um sicherzustellen, daß das Token

    ' vorhanden ist, das einen Neustart zuläßt.

    If Action = EWX_SHUTDOWN Then Action = EWX_POWEROFF

If OpenProcessToken(GetCurrentProcess(), _

      TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, hToken) Then

      ret = LookupPrivilegeValue(vbNullString, _

        sSHUTDOWN, tkp.Privileges(0).pLuid)

      tkp.PrivilegeCount = 1

      tkp.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED

      fOkReboot = AdjustTokenPrivileges(hToken, 0, tkp, _

        LenB(tkpOld), tkpOld, ret)

    End If

  Else

    ' Win95/98 wird ausgeführt. Keine Aktion ist notwendig.

fOkReboot = True

  End If

  

  If fOkReboot Then _

    RebootSystem = (ExitWindowsEx(Action, 0) <> 0)

End Function









'Aktuelle Windows-Plattform ermitteln

Private Function GetWinPlatform() As Long

  Dim osvi As OSVERSIONINFO

  Dim strCSDVersion As String

    

  osvi.dwOSVersionInfoSize = Len(osvi)

  If GetVersionEx(osvi) = 0 Then

      Exit Function

  End If

  GetWinPlatform = osvi.dwPlatformId

End Function



'Prüfen, ob Windows NT/2000

Public Function IsWindowsNT() As Boolean

  Const dwMaskNT = &H2&

IsWindowsNT = (GetWinPlatform() And dwMaskNT)

End Function 





Code eingefügt mit Syntaxhighlighter 3.0




Gruss Klapperstorch
----------------------------------------------------
Aus Felern lernt man oder...
Edjucashon isnt woerking

geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: