我正在开发一个应该在Windows 8和7上运行的.net 3.5应用程序。
作为应用程序的一部分,我在C:\ ProgramData下创建一个新文件夹。
创建文件夹后,我设置了以下ACL - 允许每个人读写。
var directorySecurity = directoryInfo.GetAccessControl();
var worldSecurityIdentifier = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
directorySecurity.AddAccessRule(new FileSystemAccessRule(worldSecurityIdentifier, FileSystemRights.Read, AccessControlType.Allow));
directorySecurity.AddAccessRule(new FileSystemAccessRule(worldSecurityIdentifier, FileSystemRights.Write, AccessControlType.Allow));
在Windows 8上,我遇到以下行为:如果我将文件复制到该目录,当我查看文件属性中的安全选项卡时,这就是我所看到的。
我不明白这个用户是谁以及它是如何创建的。以及我为每个人定义的ACL在哪里?
似乎这个未知的SID获得了我为Everyone设置的ACL。
我怀疑这可能是因为我正在开发.net 3.5而不是4,但是当我将目标框架更改为4时,它没有帮助。
当我检查调试worldSecurityIdentifier是什么时,这就是我得到的
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:3)
尝试:
directorySecurity.AddAccessRule(
new FileSystemAccessRule(
worldSecurityIdentifier,
FileSystemRights.Read | FileSystemRights.Write,
InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
PropagationFlags.None,
AccessControlType.Allow));
这将设置ACE,使其由子对象继承。