複製鏈接
請複製以下鏈接發送給好友

AdjustTokenPrivileges

鎖定
AdjustTokenPrivileges是一種函數,用於啓用或禁止,指定訪問令牌的特權。
外文名
AdjustTokenPrivileges
用    途
啓用或禁止 指定訪問令牌的特權
缺    點
不能添加新的特權到訪問令
性    質
函數

目錄

AdjustTokenPrivileges內容

AdjustTokenPrivileges
AdjustTokenPrivileges這個函數啓用或禁止 指定訪問令牌的特權。
啓用或禁用特權一個有TOKEN_ADJUST_PRIVILEGES訪問的訪問令牌.
BOOL AdjustTokenPrivileges(
HANDLE TokenHandle, //包含特權的句柄
BOOL DisableAllPrivileges,//禁用所有權限標誌
PTOKEN_PRIVILEGES NewState,//新特權信息的指針(結構體)
DWORD BufferLength, //緩衝數據大小,以字節為單位的PreviousState的緩存區(sizeof)
PTOKEN_PRIVILEGES PreviousState,//接收被改變特權當前狀態的Buffer
PDWORD ReturnLength //接收PreviousState緩存區要求的大小
);

AdjustTokenPrivileges參數

TokenHandle
包含要修改特權的訪問令牌的標識(句柄).這個句柄必須有TOKEN_ADJUST_PRIVILEGES訪問令牌.如果PreviousState不是NULL,這個句柄還必須有TOKEN_QUERY訪問特權.
DisableAllPrivileges
標誌這個函數是否禁用該令牌的所有特權.如果為TRUE,這個函數禁用所有特權,NewState參數無效.如果為假,以NewState參數指針的信息為基礎來修改特權.
NewState
一個TOKEN_PRIVILEGES結構體的指針指定了一組特權和他們的屬性.
如果參數DisableAllPrivileges為FALSE,AdjustTokenPrivileges 啓用或禁用這些令牌的特權.
如果你給一個特權設置了SE_PRIVILEGE_ENABLED的屬性,這個函數將啓動特權,否則禁用特權.
如果DisableAllPrivileges為TRUE,這個參數無效.
BufferLength
標誌參數PreviousState指針以字節大小緩存區(sizeof).
如果參數PreviousState是NULL,這個參數可以為NULL.
PreviousState
這個函數填充一個TOKEN_PRIVILEGES結構體指針】,它包括該函數修改之前任何特權狀態.這個參數可以為NULL.
如果指定的緩衝區太小,無法收到完整的修改權限列表,這個函數失敗並不會修改任何特權.
這個函數設置了一個 擁有修改權限完成列表【 參數ReturnLength 】的字節數 的指針變量.[結果的Buffer]
ReturnLength
接收 參數PreviousState的緩存區指針的 字節大小 的 變量指針(長度指針).
如果PreviousState為NULL,這個參數可以為NULL.
如果這個函數成功,返回非0.為了確定這個函數是否修改了所有指定的特權,可以調用GetLastError函數,當這個函數返回下面的值之一時就代表函數成功:
描述
ERROR_SUCCESS
這個函數修改了所有指定的特權。
ERROR_NOT_ALL_ASSIGNED
這個令牌沒有參數NewState裏指定一個或多個的權限。(一個或多個沒有修改成功).
即使權限沒有被修改。這個函數也可能成功(返回這個error值)
表明 參數PreviousState 被修改。
如果這個函數失敗,返回0.要得到更多的錯誤信息,調用GetLastError.
備註
AdjustTokenPrivileges函數不能添加新的特權到訪問令牌.它只能啓用或禁用令牌現行的令牌.要想確定這個令牌的特權,調用GetTokenInformation函數.
請注意,參數NewState可以不給令牌指定權限,這不會導致函數失敗.
在這種情況下,這個函數修改令牌現有的特權,其他特權無效,併成功返回.
調用GetLastError函數,以確定這個函數修改了所有指定的特權.
PreviousState參數表明特權被修改.
參數PreviousState 返回一個 包含 修改權限 原始狀態的結構體 TOKEN_PRIVILEGES,
這樣就可以在隨後調用AdjustTokenPrivileges函數時,傳遞PreviousState指針到 參數NewState ,來恢復原來的狀態.