创建目录并为用户提供FullControl问题

时间:2010-09-20 12:51:55

标签: c#

我在创建具有特定权限的目录时遇到问题。

        //Make sure Tools directory exists
        DirectoryInfo oMyDirectoryInfo = new DirectoryInfo(oInstance.szToolsPath);
        if (!oMyDirectoryInfo.Exists)
        {
            oMyDirectoryInfo.Create();
            DirectorySecurity oDirectorySecurity = oMyDirectoryInfo.GetAccessControl();
            oDirectorySecurity.AddAccessRule(new FileSystemAccessRule((Settings.Default.LoginDomain + "\\" + Settings.Default.LoginUsername), FileSystemRights.FullControl, InheritanceFlags.ContainerInherit, PropagationFlags.InheritOnly, AccessControlType.Allow));
            oMyDirectoryInfo.SetAccessControl(oDirectorySecurity);
        }

现在创建目录,我可以看到Login已添加到安全选项卡中。但是,当我冒充登录并尝试将文件复制到该目录时,我收到了一个未经授权的例外。我可以创建一个文件(没有数据),我可以创建一个文件夹,但我无法将数据写入文件(但我设置了FullControl:/)

我通过Windows进一步挖掘了权限,我发现它适用于子文件夹,但我也想将其设置为文件。我如何通过代码完成此操作?

这是在Windows 7上

2 个答案:

答案 0 :(得分:6)

在创建FileSystemAccessRule时,您指定的是InheritanceFlags.ContainerInherit。这会将掩码传播到子容器。如果要应用于叶对象(在您的情况下为文件),则需要指定InheritanceFlags.ObjectInherit,或同时指定两者,

 InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit 

答案 1 :(得分:0)

使用此选项添加访问规则

string adminUserName = Environment.UserName;
            DirectorySecurity dirService = Directory.GetAccessControl(directory + hexID);
            FileSystemAccessRule fsa = new FileSystemAccessRule(adminUserName,FileSystemRights.FullControl, AccessControlType.Deny);

            dirService.AddAccessRule(fsa);//add
            Directory.SetAccessControl(directory + hexID, dirService);

并使用此功能删除访问规则

string adminUserName = Environment.UserName;
            DirectorySecurity dirService = Directory.GetAccessControl(directory + hexID);
            FileSystemAccessRule fsa = new FileSystemAccessRule(adminUserName, FileSystemRights.FullControl, AccessControlType.Deny);

            dirService.RemoveAccessRule(fsa);//remove
            Directory.SetAccessControl(directory + hexID, dirService);