访问掩码

访问掩码的功能是以紧凑形式描述访问权限。 为了简化访问管理,访问掩码包含一组四位, 即通用权限,通过使用函数 RtlMapGenericMask 将其转换为一组更详细的权限。

下图演示了访问掩码。

说明访问掩码的示意图。

通用权限为以下项之一:

  • GENERIC_READ - 读取对象维护的信息的权限。

  • GENERIC_WRITE - 写入对象维护的信息的权限。

  • GENERIC_EXECUTE - 执行或查看对象的权限。

  • GENERIC_ALL - 读取、写入和执行对象的权限。

请注意,可以 (GENERIC_READ和GENERIC_WRITE组合这些权限,例如,) 生成的映射要求合并每个通用权限所需的权限。 此范例模拟用于控制对 UNIX 资源的访问的 UNIX“rwx”访问位。 访问掩码中的通用权限简化了 Windows 上的应用程序开发,因为这些权限屏蔽了各种对象类型的不同安全权限。

以下 标准权限 集适用于所有对象类型:

  • DELETE - 删除特定对象的权限。

  • READ_CONTROL - 读取控件 (对象的安全) 信息的权限。

  • WRITE_DAC - 修改控件 (对象的安全) 信息的权限。

  • WRITE_OWNER - 修改对象所有者 SID 的权限。 回想一下,所有者始终有权修改对象。

  • SYNCHRONIZE - 在给定对象上等待的权限 (假定这是对象) 的有效概念。

访问掩码的低 16 位表示特定权限。 这些特定权限的含义对于所讨论的对象是唯一的。 对于文件系统,主要利益是文件对象的特定权限。 对于文件对象,特定权限通常以不同的方式解释,具体取决于文件对象是表示文件还是目录。 对于文件,常规解释为:

  • FILE_READ_DATA - 从给定文件读取数据的权利。

  • FILE_WRITE_DATA - 将数据写入给定文件 (文件) 范围内的权利。

  • FILE_APPEND_DATA - 扩展给定文件的权利。

  • FILE_READ_EA - 读取文件扩展属性的权利。

  • FILE_WRITE_EA - 修改文件的扩展属性的权利。

  • FILE_EXECUTE - 本地执行给定文件的权利。 执行存储在远程共享上的文件需要读取权限,因为该文件是从服务器读取的,但在客户端上执行。

  • FILE_READ_ATTRIBUTES - 读取文件属性信息的权利。

  • FILE_WRITE_ATTRIBUTES - 修改文件属性信息的权利。

对于目录,使用相同的位值,但它们的解释在以下某些情况下有所不同:

  • FILE_LIST_DIRECTORY - 列出目录内容的权限。

  • FILE_ADD_FILE - 在目录中创建新文件的权限。

  • FILE_ADD_SUBDIRECTORY - 在目录中创建新目录 (子目录) 的权限。

  • FILE_READ_EA - 读取给定目录的扩展属性的权限。

  • FILE_WRITE_EA - 写入给定目录的扩展属性的权限。

  • FILE_TRAVERSE - 访问目录中的对象的权限。 FILE_TRAVERSE访问权限不同于FILE_LIST_DIRECTORY访问权限。 拥有FILE_LIST_DIRECTORY访问权限允许实体获取目录内容列表,而FILE_TRAVERSE访问权限则授予实体访问对象的权限。 没有FILE_LIST_DIRECTORY访问权限的调用方可以打开它知道已存在的文件,但无法获取目录内容列表。

  • FILE_DELETE_CHILD - 删除当前目录中的文件或目录的权限。

  • FILE_READ_ATTRIBUTES - 读取目录属性信息的权限。

  • FILE_WRITE_ATTRIBUTES - 修改目录属性信息的权限。

通用权限到文件对象的标准和特定权限的实际映射由 I/O 管理器定义。 文件系统可以使用 IoGetFileObjectGenericMapping 检索此映射。 通常,此映射是在调用文件系统之前由 I/O 管理器在IRP_MJ_CREATE处理期间完成的。 但是,这可以通过文件系统检查特定操作 (专用 FSCTL 操作(例如) )的安全性来完成。