C++のAdjustTokenPrivileges関数を使用してアクセス令牌の権限を上げる
C++では、AccessTokenPrivileges関数を使用してアクセストークンの権限を昇格させることができます。以下はサンプルコードです。
#include <Windows.h>
#include <iostream>
int main() {
HANDLE hToken;
LUID luid;
TOKEN_PRIVILEGES tkp;
// 打开当前进程的访问令牌
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) {
std::cerr << "OpenProcessToken failed." << std::endl;
return 1;
}
// 获取"SeDebugPrivilege"特权的LUID
if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid)) {
std::cerr << "LookupPrivilegeValue failed." << std::endl;
CloseHandle(hToken);
return 1;
}
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = luid;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
// 提升访问令牌的权限
if (!AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, NULL, NULL)) {
std::cerr << "AdjustTokenPrivileges failed." << std::endl;
CloseHandle(hToken);
return 1;
}
std::cout << "Access token privileges have been adjusted." << std::endl;
// 关闭句柄
CloseHandle(hToken);
return 0;
}
このコードは、まず現在のプロセスのアクセス トークンを開き、次に”SeDebugPrivilege”特権のLUIDを取得するLookupPrivilegeValue関数を使用します。それから、TOKEN_PRIVILEGES構造体を作成し、取得したLUIDとSE_PRIVILEGE_ENABLED属性をtkp構造体に割り当てます。最後に、AdjustTokenPrivileges関数を使用してアクセス トークンの権限を昇格させます。
このコードは管理者権限で実行する必要があります。アクセス トークンの権限を昇格させるには、管理者権限が必要です。