我编写了一个应用程序,用于检查目录上的所有文件系统权限。
目录具有许多访问规则(FileSystemAccessRule
类型)。
每个访问规则都有一个属性FileSystemRights
,它是一个标志枚举。
运行此命令时,我总是遇到FileSystemRights
的268435456
值(以十六进制表示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值。