4

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

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,我同时获得了用户和组,但我如何知道该值是代表用户还是组?

4

1 回答 1

1

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

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

于 2013-02-04T13:37:23.243 回答