无法在目录上设置FullControl

时间:2011-04-01 09:19:08

标签: c# security windows-7

我正试图在Windows 7机器上以编程方式为Everyone设置FullControl而没有运气。

var dirSec = dir.GetAccessControl();
var fsar = new FileSystemAccessRule(
    "Everyone",
    FileSystemRights.FullControl,
    InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
    PropagationFlags.InheritOnly, 
    AccessControlType.Allow);

dirSec.AddAccessRule(fsar);
dir.SetAccessControl(dirSec);

这为Everyone组添加了一些权限(列表和读取),但不是完全控制权限。如果我使用资源管理器编辑安全权限,我可以将其设置为FullControl。任何想法为什么失败?我的尝试没有错误消息。

2 个答案:

答案 0 :(得分:1)

这应该可以正常工作:

    string path = @"C:\test";
    DirectorySecurity ds = Directory.GetAccessControl(path);
    ds.AddAccessRule(new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, AccessControlType.Allow));
    Directory.SetAccessControl(path, ds);

如果这不起作用,那么您的应用程序似乎无权提供该类访问规则。尝试实施模拟。以下是一个示例:WindowsIdentity Impersonation using C# Code

答案 1 :(得分:0)

foreach (FileSystemRights permission in Enum.GetValues(typeof(FileSystemRights)))
{
    myDirectorySecurity.AddAccessRule(
        new FileSystemAccessRule(user,
                                 permission,
                                 InheritanceFlags.ContainerInherit |
                                     InheritanceFlags.ObjectInherit |
                                     InheritanceFlags.None,
                                 PropagationFlags.None,
                                 AccessControlType.Allow));
}