C# 无法检查';包括可继承的权限';关于新目录

C# 无法检查';包括可继承的权限';关于新目录,c#,.net,windows,inheritance,C#,.net,Windows,Inheritance,我正在尝试创建新目录,并通过编程设置权限。我已经能够创建目录,为单个用户和组应用权限,并更新大多数继承和传播设置。但是,我无法使用该代码检查窗口GUI界面(见下文)中的“包含此对象父对象的可继承权限”选项 我尝试过使用继承和传播标志的替代值,以及SetAccessRuleProtection参数,但似乎找不到任何有效的排列 代码示例: using System.Security.AccessControl; //... string dir = @"C:\MyTestFolder"; Di

我正在尝试创建新目录,并通过编程设置权限。我已经能够创建目录,为单个用户和组应用权限,并更新大多数继承和传播设置。但是,我无法使用该代码检查窗口GUI界面(见下文)中的“包含此对象父对象的可继承权限”选项

我尝试过使用继承和传播标志的替代值,以及
SetAccessRuleProtection
参数,但似乎找不到任何有效的排列

代码示例:

using System.Security.AccessControl;

//...

string dir = @"C:\MyTestFolder";

DirectorySecurity dirSec = new DirectorySecurity();

dirSec.AddAccessRule(
    new FileSystemAccessRule(@"contoso.com\myuser",
        FileSystemRights.FullControl,
        InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
        PropagationFlags.None,
        AccessControlType.Allow));

dirSec.SetAccessRuleProtection(false, true);

Directory.CreateDirectory(dir, dirSec);
不确定它是否相关,但我正在使用它为用户创建主目录,因此计划是让用户具有修改权限,并继承或添加具有完全权限的系统和管理员本地用户/组

我在StackOverflow上试过了,但似乎没有任何东西能让那个讨厌的框被选中。有什么想法吗

编辑:以下是我所指的复选框。请注意,这些不是我特定的屏幕截图,只是演示

此图在第二个窗口中显示灰显复选框,在第三个窗口中显示可访问复选框。在我的例子中,当我使用上述代码(并使用
SetAccessRuleProtection
或继承和传播标志的任何变量)创建文件夹时,这两个框都未选中


我的目的是选中这些GUI复选框(因此在引擎盖下设置它们的适当权限)当我创建目录时,使其看起来与图像相似。

看起来这一切都取决于操作顺序。似乎如果我通过提供
DirectorySecurity
创建目录,它将创建文件夹,文件夹权限将被我提供的完全覆盖。而且,出于某种原因如果我调用
SetAccessRuleProtection
为我在创建过程中提供的DirectorySecurity设置文件夹的可继承权限,它不会占用任何时间

但是,如果我先创建文件夹,而不提供任何权限信息,则默认情况下,该文件夹是在选中该框的情况下创建的,然后我可以根据需要添加我的AccessRule:

using System.Security.AccessControl;

//...

string dir = @"C:\MyTestFolder";

//If you update and add the access rules here, it doesn't work

Directory.CreateDirectory(dir);

//Now that the folder has been created...
DirectorySecurity dirSec = Directory.GetAccessControl(dir);
dirSec.AddAccessRule(
    new FileSystemAccessRule(@"contoso.com\myuser",
        FileSystemRights.FullControl,
        InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
        PropagationFlags.None,
        AccessControlType.Allow));
//this isn't really necessary at this point, but wouldn't hurt:
//dirSec.SetAccessRuleProtection(false, true);
Directory.SetAccessControl(dir, dirSec);

我不知道为什么要按这个特定的顺序进行,但如果有人有见解,我很想听听为什么。无论如何,这让我现在可以毫无问题地工作。

可能重复@MethodMan-我已经尝试将SetAccessProtectionRule设置为所有四种true和false组合,但它们都没有任何区别。在所有情况下,t复选框仍处于未选中状态。我还尝试了继承和传播标志的不同变体,认为这可能是其中之一的原因,但到目前为止,我还没有找到任何组合可以选中该复选框。不确定关于
checkbox
您需要认真显示所有相关部分你的代码。你写的好像全世界都能看到你在看什么。请用与你的问题相关的代码编辑和更新你的问题。谢谢,我很抱歉让它不清楚,我添加了一个屏幕截图,这应该有助于清理它。所有相关的代码都已经提供了-我所做的就是创建一个目录尝试应用权限时,不需要太多代码。屏幕截图对任何人都没有好处。显示您的代码。您正在编写的不是
secret
代码。我不会单击无法识别的链接。sorryAFAIK,底层CreateDirectory函数不提供任何方法来指定具有继承的DACL。假定这是一种向后兼容性限制,因为继承只在Windows 2000中引入。