我编写了一个应用程序,用于检查目录上的所有文件系统权限。

目录具有许多访问规则(FileSystemAccessRule类型)。

每个访问规则都有一个属性FileSystemRights,它是一个标志枚举。

运行此命令时,我总是遇到FileSystemRights268435456值(以十六进制表示0x10000000)。

此值只是不会出现在枚举中!它实际上高于最高的单个标志值(Synchronize,其值为0x100000)。

有人知道这是什么吗?

最佳答案

http://cjwdev.wordpress.com/2011/06/28/permissions-not-included-in-net-accessrule-filesystemrights-enum/

从该页面:


  使用.NET,您可能会认为确定哪些权限是
  分配给目录/文件应该很容易,因为有一个
  定义的FileSystemRights枚举似乎包含所有可能
  文件/目录可以具有的权限并调用
  AccessRule.FileSystemRights返回这些值的组合。
  但是,您很快就会遇到一些权限,其中的值
  此属性与FileSystemRights中的任何值都不匹配
  枚举(我希望他们不要为某些属性使用相同的名称
  作为类型,但嘿)。
  
  最终结果是,对于某些文件/目录,您只需
  无法确定为其分配了哪些权限。如果你这样做
  然后访问AccessRule.FileSystemRights.ToString对于这些值,您所看到的全部
  是数字而不是描述(例如,修改,删除,完全控制
  等等)。您可能会看到的常见数字是:
  
  -1610612736,–536805376和268435456
  
  要弄清楚这些权限实际上是什么,您需要查看
  将数字视为32个单独的位时会设置哪些位
  而不是作为整数(因为整数为32位长),然后进行比较
  他们到这个图:
  http://msdn.microsoft.com/en-us/library/aa374896(v=vs.85).aspx
  
  因此,例如-1610612736设置了第一位和第三位,
  这意味着它是GENERIC_READ与GENERIC_EXECUTE结合在一起的。所以现在
  您可以将这些通用权限转换为特定文件
  它们对应的系统权限。
  
  您可以在此处查看每个通用权限映射到哪些权限:
  http://msdn.microsoft.com/en-us/library/aa364399.aspx。请注意
  STANDARD_RIGHTS_READ,STANDARD_RIGHTS_EXECUTE和
  STANDARD_RIGHTS_WRITE都是一样的东西(不知道为什么,似乎
  对我来说很奇怪),实际上都等于
  FileSystemRights.ReadPermissions值。

09-26 04:16