如何查看是否对文件或文件夹select“包含可inheritance的权限”?

我在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); 

但是,我注意到,这个新的访问规则不会传播到在其安全属性中未选中“包含可inheritance权限…”选项的子文件夹。 这只是有道理的。 所以,我想要做的是打开任何这样的子文件夹的安全权限inheritance。

我的挖掘发现了ObjectSecurity.SetAccessRuleProtection方法应该是我需要的一半。 但是,在已经inheritance父类的DACL的对象上盲目地使用上述方法似乎是草率的。 因此,我想确定哪些对象的权限inheritanceclosures,但我似乎无法find相应的方法或返回此信息的属性。 有一个吗? 我在这里错过了什么?

Solutions Collecting From Web of "如何查看是否对文件或文件夹select“包含可inheritance的权限”?"

我记得使用这样的东西:

 DirectoryInfo d = new DirectoryInfo(@"e:\test1"); DirectorySecurity acl = d.GetAccessControl(); if (acl.GetAccessRules(false, true, typeof(System.Security.Principal.SecurityIdentifier)).Count >0) // -- has inherited permissions else // -- has no inherited permissions 

我也试图找到一个方法来检查,但我找不到任何(即使在C + +)。 所以我最终使用了上面的代码。 它像一个魅力工作。

似乎有一个管理的方式来做到这一点:

 DirectorySecurity ds = System.IO.Directory.GetAccessControl(@"C:\test"); byte[] rawBytes = ds.GetSecurityDescriptorBinaryForm(); RawSecurityDescriptor rsd = new RawSecurityDescriptor(rawBytes, 0); if ((rsd.ControlFlags & ControlFlags.DiscretionaryAclProtected) == ControlFlags.DiscretionaryAclProtected) { // "Include inheritable permissions from this object's parent" is unchecked } else { // "Include inheritable permissons from this object's parent" is checked }