在C++中使用AdjustTokenPrivileges
函數可以提升訪問令牌的權限。下面是一個示例代碼:
#include <iostream>
#include <windows.h>
int main() {
HANDLE hToken;
TOKEN_PRIVILEGES tp;
LUID luid;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) {
std::cout << "Failed to open process token." << std::endl;
return 1;
}
if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid)) {
std::cout << "Failed to lookup privilege value." << std::endl;
return 1;
}
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if (!AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), NULL, NULL)) {
std::cout << "Failed to adjust token privileges." << std::endl;
return 1;
}
std::cout << "Token privileges adjusted successfully." << std::endl;
CloseHandle(hToken);
return 0;
}
該代碼打開當前進程的訪問令牌,然后使用LookupPrivilegeValue
函數查找SE_DEBUG_NAME
特權的LUID。接下來,將要修改的特權信息填充到TOKEN_PRIVILEGES
結構體中,然后使用AdjustTokenPrivileges
函數提升訪問令牌的權限。如果調用成功,將輸出"Token privileges adjusted successfully."。
需要注意的是,運行此代碼需要管理員權限。