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関数を使用してアクセス トークンの権限を昇格させます。

このコードは管理者権限で実行する必要があります。アクセス トークンの権限を昇格させるには、管理者権限が必要です。

bannerAds