我写了一个简单的代码来检索文件夹的安全信息 该信息包含用户和组以及他们对文件夹的权限
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
行中,我同时获得了用户和群组,但我怎么知道该值是代表用户还是群组?
答案 0 :(得分:1)
据我所知,CLR不会公开这些信息。您必须手动调用LsaLookupSids
并检查它将返回的SID_NAME_USE值。 CLR也调用此函数以将SID转换为帐户名,但它会丢弃SID_NAME_USE值。对于代码,请打开您的Reflector,打开mscorlib,看看TranslateToNTAccounts
中的内部System.Security.Principal.SecurityIdentifier
函数是如何工作的。
作为替代方案,如果您不打算重复执行此类查找,则可能更容易使用WMI - 通过SID查询Win32_Account
并检查SIDType成员。