如何检查给定的用户是否是内置Administrators组的成员?
时间:2020-03-05 18:50:10 来源:igfitidea点击:
我需要以编程方式(在.NET中)检查给定的用户(域帐户)是否为当前计算机(执行应用程序的计算机)上内置Administrators组的成员。
是否有可能?
解决方案
回答
我们可以像我在此答案中那样循环分组:
通过C#确定本地组的成员
阅读更多内容后,最简单的方法是使用System.DirectoryServices.AccountManagement名称空间。使用方法如下:
http://www.leastprivilege.com/SystemDirectoryServicesAccountManagement.aspx
样本:
public static bool IsUserInGroup(string username, string groupname, ContextType type) { PrincipalContext context = new PrincipalContext(type); UserPrincipal user = UserPrincipal.FindByIdentity( context, IdentityType.SamAccountName, username); GroupPrincipal group = GroupPrincipal.FindByIdentity( context, groupname); return user.IsMemberOf(group); }
回答
我不知道.Net,但是在win32中,简单的方法是调用IsUserAnAdmin()。如果我们需要更多控制权,则可以打开流程令牌并使用CheckTokenMembership来检查需要检查的每个组
编辑:请参阅pinvoke.net以获取.NET示例代码(感谢chopeen)
回答
为此,我们可以使用Win32 API进行调用:IsUserAnAdmin
在Vista上,问题更为复杂...请参阅此博客文章。
回答
如果我们正在谈论当前正在运行的用户,则
using System.Security.Principal; WindowsIdentity identity = WindowsIdentity.GetCurrent(); WindowsPrincipal wp = new WindowsPrincipal(identity); if (wp.IsInRole("BUILTIN\Administrators")) // Is Administrator else // Is Not
如果不是这样,我希望它可以为特定用户设置身份,但没有考虑如何使用。