编辑代码

#include <windows.h>
#include <shellapi.h>
#include <iostream>

bool 是否以管理员权限运行() {
    BOOL fIsRunAsAdmin = FALSE;
    PSID pAdministratorsGroup = NULL;

    // 分配并初始化管理员组的SID。
    SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
    if (!AllocateAndInitializeSid(
        &NtAuthority,
        2,
        SECURITY_BUILTIN_DOMAIN_RID,
        DOMAIN_ALIAS_RID_ADMINS,
        0, 0, 0, 0, 0, 0,
        &pAdministratorsGroup)) {
        return false;
    }

    // 确定管理员组的SID是否在进程的主要访问令牌中启用。
    if (!CheckTokenMembership(NULL, pAdministratorsGroup, &fIsRunAsAdmin)) {
        fIsRunAsAdmin = FALSE;
    }

    // 释放SID并返回。
    FreeSid(pAdministratorsGroup);
    return fIsRunAsAdmin;
}

int main() {
    if (是否以管理员权限运行()) {
        std::cout << "该进程以管理员权限运行。" << std::endl;
    } else {
        std::cout << "该进程没有以管理员权限运行。" << std::endl;
        // 使用管理员权限重新启动应用程序
        ShellExecute(NULL, "runas", "path_to_your_executable", NULL, NULL, SW_SHOWNORMAL);
    }
    return 0;
}