And*_*erd 9 .net security ntfs
我编写了一个应用程序来检查目录上的所有文件系统权限.
目录有许多访问规则(类型FileSystemAccessRule).
每个访问规则都有一个属性FileSystemRights,它是一个标志枚举.
运行时,我会遇到一个FileSystemRights值268435456(以0x10000000十六进制表示).
这个值只是没有出现在枚举中!它实际上高于最高的单个标志值(Synchronize具有值0x100000).
有谁知道这是什么?
Chr*_*ain 12
从该页面:
使用.NET,您可能认为确定分配给目录/文件的权限应该非常简单,因为定义的FileSystemRights Enum似乎包含文件/目录可以拥有的每个可能的权限,并且调用AccessRule.FileSystemRights返回这些价值观的结合.但是,您很快就会遇到一些权限,其中此属性中的值与FileSystemRights枚举中的任何值都不匹配(我希望他们不会将某些属性命名为类型但是嘿).
最终结果是,对于某些文件/目录,您无法确定为其分配了哪些权限.如果您使用AccessRule.FileSystemRights.ToString,那么对于这些值,您看到的只是一个数字而不是描述(例如,Modify,Delete,FullControl等).您可能会看到的常见数字是:
-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值.