我需要生成有权访问 Windows 文件夹的用户名列表。
我用过:
DirectoryInfo di = new DirectoryInfo("c:\path");
DirectorySecurity acl = di.GetAccessControl(AccessControlSections.All);
AuthorizationRuleCollection rules = acl.GetAccessRules(true, true, typeof(NTAccount));
foreach (AuthorizationRule rule in rules)
{
Console.WriteLine(string.Format("Rule:{0}", rule.IdentityReference.));
}
这将为我提供有权访问的组列表:
Rule:NT AUTHORITY\SYSTEM
Rule:BUILTIN\Administrators
Rule:domedomain\Administrators
etc..
我尝试过将用户与组匹配:
using (PrincipalContext AD = new PrincipalContext(ContextType.Domain, "domainname"))
{
using (UserPrincipal UP = UserPrincipal.FindByIdentity(AD, appOptions.Username))
{
System.DirectoryServices.AccountManagement.PrincipalSearchResult<System.DirectoryServices.AccountManagement.Principal> groups = UP.GetGroups(AD);
foreach (var g in groups.ToList())
Console.WriteLine(g.SamAccountName + " + " + g.Sid);
}
}
这给了我一个列表,例如:
Domain Users
Contractors
Administrators
etc
目录中的规则列表与用户的组列表不匹配。我应该做什么。
我需要一个可以指定路径的函数,它告诉我具有访问权限的用户名列表。或者,我可以提供用户名来检查他们是否有权访问。我没有密码,所以我无法冒充用户。