C 如何检查指定用户是否是本地计算机上的管理员?
我想知道,用户是否是PC上的管理员?我发现了一个代码片段,它可以做到这一点,但我有一个问题。此代码的问题是,如果启动该进程的用户是否具有管理员权限,则此函数将返回。但我想查询特定用户是否具有管理员权限。我可以这样做吗?这很重要,因为我的应用程序将在系统帐户下运行,因此它将始终返回用户是admin,但我想知道登录的用户是否是admin 代码段:C 如何检查指定用户是否是本地计算机上的管理员?,c,windows,C,Windows,我想知道,用户是否是PC上的管理员?我发现了一个代码片段,它可以做到这一点,但我有一个问题。此代码的问题是,如果启动该进程的用户是否具有管理员权限,则此函数将返回。但我想查询特定用户是否具有管理员权限。我可以这样做吗?这很重要,因为我的应用程序将在系统帐户下运行,因此它将始终返回用户是admin,但我想知道登录的用户是否是admin 代码段: BOOL IsUserAdmin( VOID ) /*++ Routine Description: This routine returns TRUE
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 );
}
您需要采取以下步骤
标记\u DUPLICATE
CheckTokenMembership()
,但传递令牌而不是NULL
请看这篇关于MSDN的博客文章:
哪个登录用户?可能有很多。不要使用系统帐户。这是2011年。在我的公司,一次只有一个登录用户:)为什么不使用系统帐户?这有点复杂,但有一个调度任务将调用.bat文件,并运行其中的每个应用程序。计划的任务运行在系统帐户下。您不应该在系统帐户下运行。它太强大了。坏习惯。不要运行特权服务。@David:通常需要某种级别的特权,尽管它可能不应该是“系统”,这取决于应用程序的详细信息。通常不赞成只使用链接的答案,因为链接会随着时间的推移而断开,从而使答案无效。至少,你应该总结一下链接所解释的内容,因此,如果链接确实中断,一些有用的信息仍然可用。