如何区分分配给文件夹安全性的用户和组?

时间:2013-02-04 13:14:58

标签: c# .net

我写了一个简单的代码来检索文件夹的安全信息 该信息包含用户和组以及他们对文件夹的权限

public void GetSecurityRules(DirectoryInfo directoryInfo)
    {
        DirectorySecurity DSecurity = directoryInfo.GetAccessControl();
        AuthorizationRuleCollection Rules = DSecurity.GetAccessRules(true, true, typeof(NTAccount));


        foreach (FileSystemAccessRule fileSystemAccessRule in Rules)
        {
            Console.WriteLine("User/Group name {0}",fileSystemAccessRule.IdentityReference.Value);
            Console.WriteLine("Permissions: {0}", fileSystemAccessRule.FileSystemRights.ToString());
        }
    }

fileSystemAccessRule.IdentityReference.Value行中,我同时获得了用户和群组,但我怎么知道该值是代表用户还是群组?

1 个答案:

答案 0 :(得分:1)

据我所知,CLR不会公开这些信息。您必须手动调用LsaLookupSids并检查它将返回的SID_NAME_USE值。 CLR也调用此函数以将SID转换为帐户名,但它会丢弃SID_NAME_USE值。对于代码,请打开您的Reflector,打开mscorlib,看看TranslateToNTAccounts中的内部System.Security.Principal.SecurityIdentifier函数是如何工作的。

作为替代方案,如果您不打算重复执行此类查找,则可能更容易使用WMI - 通过SID查询Win32_Account并检查SIDType成员。