3

我正在开发一个应该在 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 获得了我为所有人设置的 ACL。

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

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

在此处输入图像描述

谁能帮我解决这个问题?

4

1 回答 1

3

尝试:

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

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

于 2013-06-26T19:15:00.133 回答