所有安全对象都使用下图所示的访问掩码格式来安排其访问权限。
在这种格式中,低16位用于特定对象的访问权限,后8位用于标准访问权限,这些权限适用于大多数类型的对象,而4个高位用于指定通用访问权限每种对象类型可以映射到一组标准和特定于对象的权限。 ACCESS_SYSTEM_SECURITY位对应于访问对象的SACL的权限。
把FileSystemRights 转化成32位的访问掩码格式,如下C#代码:
foreach(var ss in Enum.GetValues(typeof(FileSystemRights))) { Console.WriteLine($"{ss.ToString().PadLeft(28)}:{Convert.ToString((int)ss,2).PadLeft(32,'0')}"); }
GENERIC_READ
位映射到READ_CONTROL
和SYNCHRONIZE
标准访问权限以及FILE_READ_DATA
,FILE_READ_EA
和FILE_READ_ATTRIBUTES
这三个对象特定的访问权限。其他类型的对象将GENERIC_READ
位映射到适合该类型对象的任何访问权限集。
可以使用通用访问权限来指定打开对象的句柄时所需的访问类型。会比指定所有相应的标准和特定权限要简单。
下表显示了为通用访问权限定义的常量。
每种类型的可保护对象都有一组访问权限,这些访问权限对应于特定于该类型对象的操作。除了这些特定于对象的访问权限之外,还有一组标准访问权限,它们对应于大多数类型的可保护对象的通用操作。
访问掩码格式包括一组用于标准访问权限的位。 Winnt.h中定义了以下Windows标准访问权限常量。