Funktionreferenz


_WinAPI_AdjustTokenPrivileges

Beschreibung anzeigen in

Aktiviert oder deaktiviert bestimmte Privilegien im angegebenen Zugangstoken

#include <WinAPIProc.au3>
_WinAPI_AdjustTokenPrivileges ( $hToken, $aPrivileges, $iAttributes, ByRef $aAdjust )

Parameter

$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.

Rückgabewert

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

Bemerkungen

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

Siehe auch

Suche nach AdjustTokenPrivileges in der MSDN Bibliothek.

Beispiel

#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