Detect if program is running with full administrator rights

前端 未结 2 581
感动是毒
感动是毒 2020-11-27 07:04

I need to determine if my program is running with full administrator rights. By that I mean if uac is turned on (for win vista/7) that I need to determine if the program act

相关标签:
2条回答
  • 2020-11-27 07:29

    An expansion on Anders' answer for those (like me) who are less Windows literate:

        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"));
        }
    
    0 讨论(0)
  • 2020-11-27 07:43
    • Win9x: Everyone is "admin"
    • NT4: OpenThreadToken/OpenProcessToken + GetTokenInformation(...,TokenGroups,...) on DOMAIN_ALIAS_RID_ADMINS SID in a loop
    • 2000+: OpenThreadToken/OpenProcessToken + CheckTokenMembership on DOMAIN_ALIAS_RID_ADMINS SID

    Other alternatives are: IsUserAnAdmin or AccessCheck

    Checking the TOKEN_ELEVATION* stuff in the token is not required for testing the current process but it is useful if you need to find out if the user could elevate because they have a split token etc.

    0 讨论(0)
提交回复
热议问题