Мне нужно удалить определенные учетные записи (например, опекуна «Все» или какую-либо глобальную группу, которая предоставляет всем доступ к папке) из ACL-списка в определенной подпапке общего ресурса. Я получаю объект DirectorySecurity, получаю и перебираю AuthorizationRuleCollection, удаляю рассматриваемый AccessRule из ACL, а затем вызываю SetAccessControl для применения изменений. Все работает нормально, если целевая папка небольшая, но если в ней много дочерних папок и файлов, для внесения изменений может потребоваться вечность (гораздо дольше, чем просто сделать это вручную). Я только хочу иметь дело с ACL на целевой папке. Есть ли способ сделать это с помощью классов .net DirectorySecurity? Или мне нужно прибегнуть к Win32 API или какому-то другому решению? Спасибо.
Вот фрагмент кода. При вызове dirInfo.SetAccessControl (dirSec) он зависает, когда размер папки очень большой.
DirectoryInfo dirInfo = new DirectoryInfo(path);
DirectorySecurity dirSec = dirInfo.GetAccessControl();
AuthorizationRuleCollection acl = dirSec.GetAccessRules(true, true,
typeof(System.Security.Principal.NTAccount));
foreach (FileSystemAccessRule ace in acl)
{
if (groupsToRemove.Contains(ace.IdentityReference.Value))
{
dirSec.RemoveAccessRuleSpecific(ace);
dirInfo.SetAccessControl(dirSec);
}
}