检测程序是否以完全管理员权限运行

22

我需要确定我的程序是否以完全管理员权限运行。我的意思是,如果uac已经开启(对于win vista / 7),那么我需要确定程序是否实际具有管理员权限(例如,如果用户右键单击并选择“以管理员身份运行”),而不是受uac限制。我该如何在C ++中实现这一点?


请不要在标题栏中加入 [标签]。那是标签的作用。 - abelenky
1
你可以尝试执行你需要权限的操作。 - ruslik
2
可能是重复的问题:如何检查进程是否具有管理员权限 - CinCout
2个回答

12

其他选择包括:IsUserAnAdminAccessCheck

检查令牌中的TOKEN_ELEVATION*内容对于测试当前进程不是必需的,但如果需要查找用户是否可以升级,因为他们具有分裂令牌等,则非常有用。


1

对于那些(像我一样)不太熟悉Windows的人,这是Anders答案的扩展:

    BOOL isMember;
    PSID administratorsGroup = NULL;
    SID_IDENTIFIER_AUTHORITY SIDAuthNT =
        SECURITY_NT_AUTHORITY;

    if (!AllocateAndInitializeSid(&SIDAuthNT, 2,
        SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS,
        0, 0, 0, 0, 0, 0,
        &administratorsGroup))
    {
        throw(oops_t(GetLastError(), "AllocateAndInitializeSid"));
    }

    if (!CheckTokenMembership(nullptr, administratorsGroup, &isMember))
    {
        throw(oops_t(GetLastError(), "CheckTokenMembership"));
    }

    if (!isMember)
    {
        throw(oops_t(ERROR_ACCESS_DENIED, "Test for Admin privileges"));
    }

你忘记添加 FreeSid(administratorsGroup); 了。 - Mecanik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接