我想知道,如果用户是PC上的管理员?我找到了一个代码片段,它可以做到这一点,但我有一个问题。此代码的问题是,如果启动该进程的用户具有管理员权限,则此函数将返回。但我想查询特定用户是否具有管理员权限。我能以某种方式这样做吗?这很重要,因为我的应用程序将在SYSTEM帐户下运行,因此它将始终返回用户是管理员,但我想知道登录用户是否是管理员?
代码段:
BOOL IsUserAdmin( VOID )
/*++
Routine Description: This routine returns TRUE if the caller's
process is a member of the Administrators local group. Caller is NOT
expected to be impersonating anyone and is expected to be able to
open its own process and process token.
Arguments: None.
Return Value:
TRUE - Caller has Administrators local group.
FALSE - Caller does not have Administrators local group. --
*/
{
BOOL b;
SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
PSID AdministratorsGroup;
b = AllocateAndInitializeSid(
&NtAuthority,
2,
SECURITY_BUILTIN_DOMAIN_RID,
DOMAIN_ALIAS_RID_ADMINS,
0, 0, 0, 0, 0, 0,
&AdministratorsGroup
);
if ( b )
{
if ( !CheckTokenMembership( NULL, AdministratorsGroup, &b ) )
{
b = FALSE;
}
FreeSid( AdministratorsGroup );
}
return ( b );
}
答案 0 :(得分:2)
您需要执行以下步骤。
OpenProcessToken()
传递进程句柄。请务必指定TOKEN_DUPLICATE
。DuplicateToken()
以获取模拟令牌。CheckTokenMembership()
但是传递令牌而不是NULL
。答案 1 :(得分:1)
在登录的用户帐户中运行您的用户界面。这可以保护特权服务免受破坏性攻击。
使用DCOM将请求从GUI转发到特权服务。在特权服务中使用模拟来发现用户的权限。
答案 2 :(得分:0)