要調用AdjustTokenPrivileges
函數,需要正確設置一些參數和權限。以下是一個示例代碼,演示如何正確調用AdjustTokenPrivileges
函數:
#include <windows.h>
#include <iostream>
int main() {
// 獲取當前進程的訪問令牌句柄
HANDLE hToken;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken)) {
std::cout << "Failed to open process token." << std::endl;
return 1;
}
// 獲取特權的LUID
TOKEN_PRIVILEGES tp;
if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid)) {
std::cout << "Failed to get privilege LUID." << std::endl;
CloseHandle(hToken);
return 1;
}
// 設置特權的屬性
tp.PrivilegeCount = 1;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
// 調整訪問令牌的特權
if (!AdjustTokenPrivileges(hToken, FALSE, &tp, 0, NULL, NULL)) {
std::cout << "Failed to adjust token privileges." << std::endl;
CloseHandle(hToken);
return 1;
}
std::cout << "Token privileges adjusted successfully." << std::endl;
// 關閉句柄
CloseHandle(hToken);
return 0;
}
在上述代碼中,我們首先使用OpenProcessToken
函數打開當前進程的訪問令牌。然后使用LookupPrivilegeValue
函數獲取特權的LUID。接下來,我們設置特權的屬性,并使用AdjustTokenPrivileges
函數調整訪問令牌的特權。最后,我們關閉句柄并輸出結果。
請注意,為了調用AdjustTokenPrivileges
函數,你的程序需要具備管理員權限。如果沒有管理員權限,將無法成功調整訪問令牌的特權。