2011-08-18 24 views
0

我对文件系统和权限/权限访问(又名访问控制列表,ACL)相当陌生。在对ACL进行编码时,我无法设置我想要的文件属性。我不确定我对FileSystemRights成员的理解是错误的,还是我完全做错了事情。 (而且我已经花费了相当多的时间在这部分上了)FileSystemRights问题(C#)

我想要做的是更改文件的权限,以便它只能被强制读取并且不能被编辑,重命名,删除和复制到别处。

使用MSDN的例子,这是我到目前为止有:

try 
{ 
    //Get current identity 
    WindowsIdentity self = System.Security.Principal.WindowsIdentity.GetCurrent(); 

    // Add the access control entry to the file. 
    AddFileSecurity(filename, self.Name, FileSystemRights.Modify, AccessControlType.Deny); 
    AddFileSecurity(filename, self.Name, FileSystemRights.Write, AccessControlType.Deny); 
    AddFileSecurity(filename, self.Name, FileSystemRights.ReadAndExecute, AccessControlType.Allow); 

    // Remove the access control entry from the file. 
    RemoveFileSecurity(filename, self.Name, FileSystemRights.ReadAndExecute, AccessControlType.Deny); 
    RemoveFileSecurity(filename, self.Name, FileSystemRights.Read, AccessControlType.Deny); 

    Console.WriteLine("Done."); 
} 
catch (Exception e) 
{ 
    Console.WriteLine(e); 
} 

我的逻辑是:

  1. 添加拒绝修改权限(拒绝.Modify将导致文件变得不可读)
  2. 添加拒绝写入权限
  3. 添加允许ReadAndExecute权利
  4. 删除拒绝入境在ReadAndExecute(如.Modify否认ReadAndExecute)
  5. 删除拒绝上读条目(如.Modify否认读)

我是否正确做这个部分?如果没有,请告诉我应该怎么做才能使文件只能读取,而不是可编辑,可修改,可删除和可复制。提前谢谢了!

+2

只要该文件是可读的,它将永远是可复制的! – Yahia

+0

是否可以(任何类型的解决方法)使其可读,但防止将其复制到别处? –

+0

否 - 任何可读的内容都是可复制的... – Yahia

回答

0

请解释它做错了什么。我看到的唯一问题可能是问题是您为自己设置了权限,但不是其他用户或组。也许你应该遍历所有的组(管理员,用户等),并禁用所有,但执行&执行。尽管我认为SYSTEM始终可以完全控制所有文件。

+0

对不起,我忘了提及这个应用程序的使用。它应该驻留在一个拇指驱动器中,该驱动器将分发给不同的用户。这就是“self.Name”进入他们的计算机域\用户的地方。在thumbdrive中有文件,它们应该只能读取,因此我不得不禁止复制,编辑和删除的功能 - 也就是说,在拇指驱动器中不需要更改任何内容,只能读取文件。 –