Как узнать, не установлен ли флажок «включить наследуемые разрешения» для файла или папки?

Я пишу небольшую утилиту на C#, чтобы убедиться, что указанная папка и все ее содержимое имеют соответствующие права доступа (Я хочу предоставить группе Authenticated Usersполный доступ ). Следующий код работает должным образом для обновления ACL папки верхнего уровня (Список управления доступом ):

SecurityIdentifier allUsers = new SecurityIdentifier(WellKnownSidType.AuthenticatedUserSid, null);
InheritanceFlags iFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit;
FileSystemAccessRule newRule = new FileSystemAccessRule(allUsers,
    FileSystemRights.FullControl, iFlags,
    PropagationFlags.None, AccessControlType.Allow);

DirectoryInfo info = new DirectoryInfo(folderPath);
DirectorySecurity security = info.GetAccessControl();
security.AddAccessRule(newRule);
info.SetAccessControl(security);

. Однако я заметил, что это новое правило доступа не распространяется на подпапки, у которых есть «Включить наследуемые разрешения…» опция снята в их свойствах безопасности. Только в этом есть смысл. Итак, что я хочу сделать, так это снова включить наследование разрешений безопасности для любых таких подпапок.

Мои раскопки обнаружилиObjectSecurity.SetAccessRuleProtectionметод, который должен составлять половину того, что мне нужно. Однако кажется небрежным просто слепо использовать описанный выше метод для объектов, которые уже наследуют DACL своего родителя. Таким образом, я хочу определить, для каких объектов отключено наследование разрешений, но я не могу найти соответствующий метод или свойство, которое возвращает эту информацию. Есть ли один? Я что-то упустил здесь?

7
задан Jeremy 10 April 2012 в 02:18
поделиться