我需要确定我的程序是否以完全管理员权限运行。我的意思是,如果uac已经开启(对于win vista / 7),那么我需要确定程序是否实际具有管理员权限(例如,如果用户右键单击并选择“以管理员身份运行”),而不是受uac限制。我该如何在C ++中实现这一点?
我需要确定我的程序是否以完全管理员权限运行。我的意思是,如果uac已经开启(对于win vista / 7),那么我需要确定程序是否实际具有管理员权限(例如,如果用户右键单击并选择“以管理员身份运行”),而不是受uac限制。我该如何在C ++中实现这一点?
其他选择包括:IsUserAnAdmin或AccessCheck
检查令牌中的TOKEN_ELEVATION*内容对于测试当前进程不是必需的,但如果需要查找用户是否可以升级,因为他们具有分裂令牌等,则非常有用。
对于那些(像我一样)不太熟悉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"));
}