public static DirectoryInfo GetAccessRuleSource(FileInfo file, FileSystemAccessRule inheritedRule)
{
DirectoryInfo parent = file.Directory;
while (parent != null)
{
DirectorySecurity security = parent.GetAccessControl(AccessControlSections.Access);
foreach (AuthorizationRule rule in security.GetAccessRules(true, true, typeof(NTAccount)))
{
if (rule.IsInherited)
{
continue;
}
if (inheritedRule.IdentityReference.Value != rule.IdentityReference.Value)
{
continue;
}
FileSystemAccessRule accessRule = rule as FileSystemAccessRule;
if (accessRule == null)
{
continue;
}
if (accessRule.AccessControlType != inheritedRule.AccessControlType)
{
continue;
}
return parent;
}
parent = parent.Parent;
}
return null;
}