我需要从共享的特定子文件夹上的 ACL 中删除某些帐户(例如“每个人”受托人或某个全局组,它允许每个人访问文件夹)。我得到一个 DirectorySecurity 对象,获取并遍历 AuthorizationRuleCollection,从 ACL 中删除有问题的 AccessRule,然后调用 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);
}
}