使用Windows原则

时间:2018-01-11 10:46:24

标签: c#

我有一个简单的问题。

实际上我在Windows环境版本10.0.16299.0和UWP中工作。我想要做的是获取有关用户帐户信息,其名称以及管理员或用户的信息,简短的代码如下所示:

public class Priciple
{
    public string UserName { get; set; }

    public string AccountDomainSid { get; set; }

    public List<string> Claims { get; set; }

    public string AdminRole { get; set; }

    public string UserRole { get; set; }

    public void GetUserInfo()
    {
        WindowsIdentity identity = WindowsIdentity.GetCurrent();
        WindowsPrincipal principal = new WindowsPrincipal(identity);

        UserName = identity.Name;
        AccountDomainSid = identity.User?.AccountDomainSid.Value ?? "Unknown";
        Claims = identity.Claims.Select(claim => claim.Value).ToList();

        AdminRole = $"Admin role {principal.IsInRole(@"BUILTIN\Administrators")}";
        UserRole = $"User role {principal.IsInRole(@"BUILTIN\Users")}";
    }
}

现在,我正在获取SID和用户名以及其他内容的列表,所以简单的类显示如下:

  

用户名 - DESKTOP-ISLHFK5 \管理员域名Sid - S-1-5-21-134928182-1594639943-345264679    本地帐户组Sid:    桌面ISLHFK5 \管理员   S-1-5-21-134928182-1594639943-345264679-500 - 据我所知这是管理员帐号   S-1-5-21-134928182-1594639943-345264679-513   S-1-5-21-134928182-1594639943-345264679-513   S-1-1-0   S-1-5-114   S-1-5-21-134928182-1594639943-345264679-1002   S-1-5-21-134928182-1594639943-345264679-1051   S-1-5-32-544   S-1-5-32-562   S-1-5-32-559   S-1-5-32-545   S-1-5-14   S-1-5-4   S-1-5-11   S-1-5-15   S-1-5-113   S-1-2-0   S-1-5-64-10

但是当我检查管理员时,我得到了:

  

权限信息管理员角色错误

现在任何想法都是为了??

2 个答案:

答案 0 :(得分:1)

您是否尝试使用WindowsBuiltInRole.Administrator;

var AdminRole = $"Admin role {principal.IsInRole(WindowsBuiltInRole.Administrator)}";

答案 1 :(得分:1)

WindowsBuiltInRole的文档中解释了这一点:

  

在Windows Vista中,用户帐户控制(UAC)确定用户的权限。如果您是内置管理员组的成员,则会为您分配两个运行时访问令牌:标准用户访问令牌和管理员访问令牌。

     

默认情况下,您处于标准用户角色。当你尝试   执行需要管理权限的任务,您可以   使用“同意”对话框动态提升角色。该   执行IsInRole方法的代码不显示同意   对话框。如果您在标准用户中,则代码返回false   角色,即使您在内置管理员组中。

     

通过右键单击,可以在执行代码之前提升权限   应用程序图标,表示您要以   管理员。

再次使用myPrincipal.IsInRole(WindowsBuiltInRole.Administrator)检查该帐户是否为管理员