vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v2.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2017
 
zurück
Rubrik: Windows/System22.03.05
AdjustTokenPrivileges-Funktion

Diese Funktion aktiviert oder deaktiviert ein Privileg eines angegebenen Zugriffs-Token.

Betriebssystem:  WinNT 3.1, WinNT 3.1, Win2000Views:  10.772 

Summer-Special bei Tools & Components!
Gute Laune Sommer bei Tools & Components
Top Summer-Special - Sparen Sie teilweise bis zu 120,- EUR
Alle sev-Entwicklerkomponenten und Komplettpakete jetzt bis zu 25% reduziert!
zum Beispiel:
  • Developer CD nur 479,20 EUR statt 599,- EUR
  • sevDTA 3.0 nur 224,30 EUR statt 299,- EUR
  •  
  • vb@rchiv   Vol.6 nur 20,00 EUR statt 24,95 EUR
  • sevCoolbar 3.0 nur 55,20 EUR statt 69,- EUR
  • - Werbung -Und viele weitere Angebote           Aktionspreise nur für kurze Zeit gültig

    Deklaration:

    Declare Function AdjustTokenPrivileges Lib "advapi32.dll" ( _
      ByVal TokenHandle As Long, _
      ByVal DisableAllPrivileges As Long, _
      NewState As Any, _ 
      ByVal BufferLength As Long, _
      PreviousState As Any, _
      ReturnLength As Long) As Long

    Beschreibung:
    Diese Funktion aktiviert oder deaktiviert ein Privileg eines angegebenen Zugriffs-Token.

    Parameter:
    TokenHandleErwartet den Handle des Tokens dessen Privilegien geändert werden sollen.
    DisableAllPrivilegesErwartet "False" wenn alle Privilegien des Tokensdeaktiviert werden sollen (NewState wird ignoriert) oder "True", wenn die bei "NewState" angegebenen Privilegienaktiviert werden sollen.
    NewStateErwartet eine TOKEN_PRIVILEGES-Struktur die das Privileg und dessen Attribute enthält. Das Privileg wirdaktiviert, wenn die TOKEN_PRIVILEGES-Struktur die Konstante "SE_PRIVILEGE_ENABLED" enthält, ansonsten wird das Privilegdeaktiviert.
    BufferLengthErwartet die Größe des Puffers der bei "Previous_State" übergeben wird in Bytes.
    PreviousStateErwartet einen Puffer der mit einer TOKEN_PRIVILEGES-Struktur gefüllt wird, die die vorherige Einstellung des Privileges enthält. Wird die Rückgabe der vorherigenEinstellung nicht erwünscht, so kann hier der Wert "0" übergeben werden.
    ReturnLengthErwartet eine Long-Variable, die mit der Größe des benötigten Speicherplatzes in dem Puffer gefüllt wird. Alternativ kann hier derWert "0" übergeben werden, wenn bei "Previous_State" der Wert "0" übergeben wurde.

    Rückgabewert:
    Ist die Funktion erfolgreich so ist die Rückgabe der Wert "0", andernfalls wird einWert "ungleich 0" zurückgegeben. Für erweiterte Fehlerinformationen rufenSie die GetLastError-Funktion auf.

    Rückgabekonstanten:
    Const ERROR_SUCCESS = 0&
    ' Der Funktionsaufruf war erfolgreich
     
    Const ERROR_NOT_ALL_ASSIGNED = 1300&
    ' Nicht alle Privilegien konnten erfolgreich geändert werden

    Beispiel:

    Private Declare Function ExitWindowsEx Lib "user32" ( _
      ByVal uFlags As Long, _
       ByVal dwReserved As Long) As Long
    Private Declare Function LookupPrivilegeValue Lib "advapi32.dll" _
      Alias "LookupPrivilegeValueA" ( _
      ByVal lpSystemName As String, _
      ByVal lpName As String, _
      lpLuid As LUID) 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 
    Private Declare Function GetVersionEx Lib "kernel32" _
      Alias "GetVersionExA"  ( _
      lpVersionInformation As OSVERSIONINFO) As Long
     
    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 Const ANYSIZE_ARRAY = 1 ' setzt die Größe des Privileges Array's
    Private Type TOKEN_PRIVILEGES
      PrivilegeCount As Long
      Privileges(1) As LUID_AND_ATTRIBUTES
    End Type
     
    ' LUID_AND_ATTRIBUTES Attributes-Konstante
    Private Const SE_PRIVILEGE_ENABLED = 2 ' aktiviert ein Privileg
     
    ' ExitWindowsEx uFlags-Konstanten
    Private Const EWX_FORCE = 4 ' beendet alle Programme ohne Aufforderung an den Benutzer
    Private Const EWX_LOGOFF = 0 ' meldet sich neu am Netzwerk an
    Private Const EWX_REBOOT = 2 ' startet den Computer neu
    Private Const EWX_SHUTDOWN = 1 ' fährt den Computer herunter
    Private Const EWX_POWEROFF = 8 ' fährt den Computer herunter und schaltet ihn ab wenn möglich
     
    ' LookupPrivilegeValue lpName-Konstanten
    Private Const SE_ASSIGNPRIMARYTOKEN_NAME = "SeAssignPrimaryTokenPrivilege" 
       ' wird benötigt, um den Primary-Token zuweisen zu können
    Private Const SE_AUDIT_NAME = "SeAuditPrivilege" 
       ' wird benutzt, um audit-log-Einträge generieren zu können
    Private Const SE_BACKUP_NAME = "SeBackupPrivilege" 
       ' wird benötigt, um Backup-Operationen durchführen zu können
    Private Const SE_CHANGE_NOTIFY_NAME = "SeChangeNotifyPrivilege" 
       ' wird benötigt, um Änderungen für Notify-Funktionen im Dateisystem zu erhalten 
    Private Const SE_CREATE_PAGEFILE_NAME = "SeCreatePagefilePrivilege" 
       ' wird benötigt, um eine Paging-Datei erstellen zu können
    Private Const SE_CREATE_PERMANENT_NAME = "SeCreatePermanentPrivilege" 
       ' wird benötigt, um permanente Objekte erstellen zu können
    Private Const SE_CREATE_TOKEN_NAME = "SeCreateTokenPrivilege" 
       ' wird benötigt, um einen Primary-Token erstellen zu können
    Private Const SE_DEBUG_NAME = "SeDebugPrivilege" 
       ' wird benötigt, um einen Prozess debuggen zu können
    Private Const SE_ENABLE_DELEGATION_NAME = ("SeEnableDelegationPrivilege") 
       ' wird benötigt, um Netzwerkrechner als vertrauenswürdig zu markieren
    Private Const SE_INC_BASE_PRIORITY_NAME = "SeIncreaseBasePriorityPrivilege"  
       ' wird benötigt, um die Basis-Priorität eines Prozesses erhöhen zu können
    Private Const SE_INCREASE_QUOTA_NAME = "SeIncreaseQuotaPrivilege" 
       ' wird benötigt, um die Quote eines Prozesses erhöhen zu können
    Private Const SE_LOAD_DRIVER_NAME = "SeLoadDriverPrivilege" 
       ' wird benötigt, um Gerätetreiber laden oder entladen zu können
    Private Const SE_LOCK_MEMORY_NAME = "SeLockMemoryPrivilege" 
       ' wird benötigt, um physische Speicherseiten einfrieren zu können
    Private Const SE_MACHINE_ACCOUNT_NAME = "SeMachineAccountPrivilege" 
       ' wird benötigt, um einen Maschinen-Account erstellen zu können
    Private Const SE_PROF_SINGLE_PROCESS_NAME = "SeProfileSingleProcessPrivilege" 
       ' wird benötigt, um Informationen eines einzelnen Prozesses ermitteln zu können
    Private Const SE_REMOTE_SHUTDOWN_NAME = "SeRemoteShutdownPrivilege" 
       ' wird benötigt, um einen Netzwerkrechner herunterfahren zu können
    Private Const SE_RESTORE_NAME = "SeRestorePrivilege" 
       ' wird benötigt, um Wiederherstellungsoperationen durchführen zu können
    Private Const SE_SECURITY_NAME = "SeSecurityPrivilege" 
       ' wird benötigt, um  einige sicherheitsrelevante Funktionen nutzen zu können
    Private Const SE_SHUTDOWN_NAME = "SeShutdownPrivilege" 
       ' wird benötigt, um das lokale System herunterfahren zu können
    Private Const SE_SYNC_AGENT_NAME = ("SeSyncAgentPrivilege") 
       ' wird benötigt, um alle Leserechte eines Dateisystems zu erlauben die sonst nur der Administrator besitzt
    Private Const SE_SYSTEM_ENVIRONMENT_NAME = "SeSystemEnvironmentPrivilege"  
       ' wird benötigt, um auf nicht flüchtigen Speicher des Systems zugreifen zu können 
    Private Const SE_SYSTEM_PROFILE_NAME = "SeSystemProfilePrivilege" 
       ' wird benötigt, um alle Informationen des Systems auslesen zu können
    Private Const SE_SYSTEMTIME_NAME = "SeSystemtimePrivilege" 
       ' wird benötigt, um die Systemzeit ändern zu können
    Private Const SE_TAKE_OWNERSHIP_NAME = "SeTakeOwnershipPrivilege" 
       ' wird benötigt, um die Zugehörigkeit eines Objektes ändern zu können
    Private Const SE_TCB_NAME = "SeTcbPrivilege" ' ' _
       ' wird benötigt, um das lokale System als Bestandteil des Netzwerkrechners anmelden zu können
    Private Const SE_UNDOCK_NAME = ("SeUndockPrivilege") 
       ' wird benötigt, um einen Laptop undocken zu können
    Private Const SE_UNSOLICITED_INPUT_NAME = "SeUnsolicitedInputPrivilege"  
       ' wird benötigt, um unaufgeforderte Daten eines Terminals lesen zu können
     
    ' AdjustTokenPrivileges DesiredAccess-Konstanten
    Private Const READ_CONTROL = &H20000 
       ' wird für einige Standardrechte der TOKEN-Konstanten benötigt
    Private Const STANDARD_RIGHTS_EXECUTE = (READ_CONTROL) 
       ' wird für TOKEN_EXECUTE benötigt
    Private Const STANDARD_RIGHTS_READ = (READ_CONTROL)' wird für TOKEN_READ benötigt 
    Private Const STANDARD_RIGHTS_WRITE = (READ_CONTROL) ' wird für TOKEN_WRITE benötigt 
    Private Const TOKEN_ADJUST_DEFAULT = (&H80) 
       ' wird benötigt, um die  Zugriffsrechte des Standardbesitzers, der Hauptgruppe oder DACL eines Zugriffs-Token zu ändern
    Private Const TOKEN_ADJUST_GROUPS = (&H40) 
       ' wird benötigt, um die Zugriffsrechte einer Gruppe eines Zugriffs-Token zu ändern
    Private Const TOKEN_ADJUST_PRIVILEGES = (&H20) 
       ' wird benötigt, um die Privilegien eines Zugriffs-Token zu setzen
    Private Const TOKEN_ADJUST_SESSIONID = (&H100) 
       ' wird benötigt, um die Session-ID eines Zugriffs-Token zu ändern. Das SE_TCB_NAME Privileg wird benötigt.
    Private Const TOKEN_ASSIGN_PRIMARY = (&H1) ' 
       ' wird benötigt, um ein Primary-Token einem Prozess zuweisen zu können. 
       ' Das SE_ASSIGNPRIMARYTOKEN_NAME Privileg wird für diese Aktion benötigt.
    Private Const TOKEN_DUPLICATE = (&H2)
       ' wird benötigt, um ein Zugriffs-Token dublizieren zu können
    Private Const TOKEN_EXECUTE = (STANDARD_RIGHTS_EXECUTE) 
       ' kombiniert die Privilegien STANDARD_RIGHTS_EXECUTE und TOKEN_IMPERSONATE
    Private Const TOKEN_IMPERSONATE = (&H4) 
       ' wird benötigt, um einen verkörperten Zugriffs-Token einem Prozess zuweisen zu können
    Private Const TOKEN_QUERY = (&H8) ' wird benötigt, um einen Zugriffs-Token abzufragen 
    Private Const TOKEN_QUERY_SOURCE = (&H10) 
       ' wird benötigt, um die Quelle eines Zugriffs-Token abfragen zu können
    Private Const TOKEN_READ = (STANDARD_RIGHTS_READ Or TOKEN_QUERY)  
       ' kombiniert die Privilegien STANDARD_RIGHTS_READ und TOKEN_QUERY
    Private Const TOKEN_WRITE = (STANDARD_RIGHTS_WRITE Or  _
       TOKEN_ADJUST_PRIVILEGES Or TOKEN_ADJUST_GROUPS Or TOKEN_ADJUST_DEFAULT)  
       ' kombiniert die Privilegien STANDARD_RIGHTS_WRITE, TOKEN_ADJUST_PRIVILEGES,  
       ' TOKEN_ADJUST_GROUPS und TOKEN_ADJUST_DEFAULT
    Private Const TOKEN_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or  _
       TOKEN_ASSIGN_PRIMARY Or TOKEN_DUPLICATE Or TOKEN_IMPERSONATE Or TOKEN_QUERY  _
       Or TOKEN_QUERY_SOURCE Or TOKEN_ADJUST_PRIVILEGES Or TOKEN_ADJUST_GROUPS Or  _
       TOKEN_ADJUST_SESSIONID Or TOKEN_ADJUST_DEFAULT) 
       ' wird benötigt, um alle Zugriffsrechte eines Zugriffs-Token zu erlauben
     
    ' AdjustTokenPrivileges Rückgabe-Konstanten
    Private Const ERROR_SUCCESS = 0& ' der Funktionsaufruf war erfolgreich
    Private Const ERROR_NOT_ALL_ASSIGNED = 1300& ' nicht alle Privilegien konnten erfolgreich geändert werden
    ' Windows neu starten
    Public Sub Command1_Click()
      Dim Retval As Long, hToken As Long, TKP As TOKEN_PRIVILEGES
      Dim TKPOld As TOKEN_PRIVILEGES, OSVI As OSVERSIONINFO
     
      ' Strukturgröße setzen
      OSVI.dwOSVersionInfoSize = Len(OSVI)
     
      ' Betriebsystemversion ermitteln
      Call GetVersionEx(OSVI)
     
      ' Falls Windows NT/2000/XP ausgeführt wird, erst Sicherheitseinstellungen vornehmen
      If OSVI.dwPlatformId = 2 Then
     
        ' öffnet einen Prozess Zugriffs-Token
        If OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES  _
           Or TOKEN_QUERY, hToken) Then
     
          ' ermittelt die Zugriffs-ID für das Herunterfahren des Systems
          Retval = LookupPrivilegeValue(vbNullString,  _
             SE_SHUTDOWN_NAME, TKP.Privileges(0).pLuid)
     
          ' setzt in der Struktur, dass das Herunterfahren des Systems 
          ' für diesen Prozess/Token aktiviert werden soll
          TKP.PrivilegeCount = 1
          TKP.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
     
          ' setzt die neuen Privilegien des Zugriff-Tokens und fährt bei Erfolg das System herunter
          If AdjustTokenPrivileges(hToken, 0&, TKP, LenB(TKPOld), TKPOld, Retval) Then
            Call ExitWindowsEx(EWX_REBOOT, 0&)
          End If
        End If
      Else
        ' Win95/98 wird ausgeführt. Keine Aktion ist notwendig.
        Call ExitWindowsEx(EWX_REBOOT, 0&)
      End If
    End Sub

    Diese Seite wurde bereits 10.772 mal aufgerufen.

    nach obenzurück
     
       

    Druckansicht Druckansicht Copyright ©2000-2017 vb@rchiv Dieter Otter
    Alle Rechte vorbehalten.
    Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

    Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel