Aktiviert oder deaktiviert bestimmte Privilegien im angegebenen Zugangstoken
#include <WinAPIProc.au3>
_WinAPI_AdjustTokenPrivileges ( $hToken, $aPrivileges, $iAttributes, ByRef $aAdjust )
$hToken | Das Handle zu dem Zugangstoken wessen Privilegien angepasst werden sollen. Das Handle muss $TOKEN_ADJUST_PRIVILEGES und $TOKEN_QUERY Zugangsrechte besitzen. |
$aPrivileges | Die Variable welche die Privilegien enthält. Wenn dieser Parameter -1 ist, so deaktiviert die Funktion die Privilegien des Tokens und ignoriert den $iAttributes Parameter. $aPrivileges kann einen der folgenden Typen annehmen. Die Privilegienkonstante ($SE_*). 1D-Array von $SE_*-Konstanten. 2D-Array von $SE_*-Konstanten und deren Attributen (siehe unten). [0][0] - Privileg [0][1] - Attribute [n][0] - Privileg [n][1] - Attribute |
$iAttributes | Die Privilegsattributen. Wenn der $aPrivileges ein 1D-Array ist, so wird $iAttributes auf das gesamte Array angewant. Wenn dieser Parameter -1 ist oder ein 2D-Array, so ignoriert die Funktion diesen Parameter und nutzt die Attribute welche im Array angegeben wurden. Dieser Parameter kann 0 (deaktiviert Privilegien) oder eine Kombination der folgenden Werte sein: $SE_PRIVILEGE_ENABLED $SE_PRIVILEGE_ENABLED_BY_DEFAULT $SE_PRIVILEGE_REMOVED $SE_PRIVILEGE_USED_FOR_ACCESS |
$aAdjust | 2D-Array des vorherigen Zustandes jeglicher Privilegien welche die Funktion anpasst. Diese ist, sofern ein Privileg von dieser Funktion angepasst wurde, das Privileg und ihr vorheriger Zustand in diesem Array enthalten. |
Erfolg: | 1 und setzt @extended auf einen der folgenden Werte. |
@extended : | 0 - Die Funktion hat alle angegebenen Privilegien angepasst. 1 - Das Token hat nicht einen oder mehrere der angegebenen Privilegien im $aPrivileges Parameter. |
Fehler: | 0 und setzt das @error Flag auf ungleich null |
Diese Funktion kann nicht neue Privilegien zu Zugangstoken hinzufügen. Sie kann nur die bestehenden Privilegien aktivieren oder deaktivieren.
Um zu entscheiden, ob die Funktion erfolgreich war und somit alle angegebenen Privilegien angepasst hat, sollte man @error und @extended überprüfen, zum Beispiel:
If Not (@error Or @extended) Then
...
EndIf
Suche nach AdjustTokenPrivileges in der MSDN Bibliothek.
#include <APIRegConstants.au3>
#include <Debug.au3>
#include <WinAPIError.au3>
#include <WinAPIHObj.au3>
#include <WinAPIProc.au3>
#include <WinAPIReg.au3>
#RequireAdmin
_DebugSetup(Default, True)
Example()
Func Example()
Local $aPrivileges[2] = [$SE_BACKUP_NAME, $SE_RESTORE_NAME]
; Enable "SeBackupPrivilege" and "SeRestorePrivilege" privileges to save and restore registry hive
Local $hToken = _WinAPI_OpenProcessToken(BitOR($TOKEN_ADJUST_PRIVILEGES, $TOKEN_QUERY))
Local $aAdjust
_WinAPI_AdjustTokenPrivileges($hToken, $aPrivileges, $SE_PRIVILEGE_ENABLED, $aAdjust)
If @error Or @extended Then
_DebugReport('Error' & @TAB & 'You do not have the required privileges.' & @CRLF)
Exit
EndIf
; Save "HKEY_CURRENT_USER\Software\AutoIt v3" to reg.dat
Local $hKey = _WinAPI_RegOpenKey($HKEY_CURRENT_USER, 'Software\AutoIt v3', $KEY_READ)
If _WinAPI_RegSaveKey($hKey, @TempDir & '\reg.dat', 1) Then
_DebugReport('- "HKEY_CURRENT_USER\Software\AutoIt v3" has been saved to reg.dat.' & @CRLF)
Else
_DebugReport("! RegSaveKey @error =" & @error & @TAB & _WinAPI_GetErrorMessage(@extended) & @CRLF)
EndIf
_WinAPI_RegCloseKey($hKey)
; Restore "HKEY_CURRENT_USER\Software\AutoIt v3" to "HKEY_CURRENT_USER\Software\AutoIt v3 (Duplicate)"
$hKey = _WinAPI_RegCreateKey($HKEY_CURRENT_USER, 'Software\AutoIt v3 (Duplicate)', $KEY_WRITE)
If _WinAPI_RegRestoreKey($hKey, @TempDir & '\reg.dat') Then
_DebugReport('- "HKEY_CURRENT_USER\Software\AutoIt v3" has been restored to "HKEY_CURRENT_USER\Software\AutoIt v3 (Duplicate)".' & @CRLF)
Else
_DebugReport("! RegRestoreKey @error =" & @error & @TAB & _WinAPI_GetErrorMessage(@extended) & @CRLF)
EndIf
_WinAPI_RegCloseKey($hKey)
; Restore "SeBackupPrivilege" and "SeRestorePrivilege" privileges by default
_WinAPI_AdjustTokenPrivileges($hToken, $aAdjust, 0, $aAdjust)
_WinAPI_CloseHandle($hToken)
FileDelete(@TempDir & '\reg.dat')
EndFunc ;==>Example