Windows 8中每个人的sid

时间:2013-06-26 17:28:48

标签: c# .net windows-8 acl

我正在开发一个应该在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上,我遇到以下行为:如果我将文件复制到该目录,当我查看文件属性中的安全选项卡时,这就是我所看到的。

Security tab of a file that was copied into the directory

我不明白这个用户是谁以及它是如何创建的。以及我为每个人定义的ACL在哪里?

似乎这个未知的SID获得了我为Everyone设置的ACL。

我怀疑这可能是因为我正在开发.net 3.5而不是4,但是当我将目标框架更改为4时,它没有帮助。

当我检查调试worldSecurityIdentifier是什么时,这就是我得到的

enter image description here

任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

尝试:

directorySecurity.AddAccessRule(
   new FileSystemAccessRule(
       worldSecurityIdentifier,
       FileSystemRights.Read | FileSystemRights.Write,
       InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
       PropagationFlags.None,
       AccessControlType.Allow));

这将设置ACE,使其由子对象继承。