为什么不设置 FileSystemRights Synchronize 权限?

Why not set FileSystemRights Synchronize permission?

来自 .Net 开发背景,在 (NTFS) 文件系统安全方面没有太多经验,System.Security.AccessControl.FileSystemRights 中的大部分权利对我来说都非常清楚。

不过,FileSystemRights.Synchronize是个例外。来自文档:

Specifies whether the application can wait for a file handle to synchronize with the completion of an I/O operation.

或者如 someone else 解释的那样:

The Synchronize permission allows or denies different threads to wait on the handle for the file or folder and synchronize with another thread that may signal it. This permission applies only to multiple-threaded, multiple-process programs.

所以我的问题是:

  1. 以上说明是否正确?
  2. 如果是,为什么设置同步权限(如果已授予读取权限)?

做一些研究后回答我自己的问题:

  1. 是的,没错。从高级编辑权限对话框引用 Microsoft "Permissions Entry Dialog Box" 帮助屏幕:

[Synchronize] Allows or denies different threads to wait on the handle for the file or folder and synchronize with another thread that may signal it. This permission applies only to multithreaded, multiprocess programs.

  1. 您不能通过用户界面设置同步权限。它总是设置有其他权限。仅对于 .Net API(很可能还有其他),您可以选择不设置 Synchronize 权限。

这些是您可以在权限对话框中设置的粗略权限及其包括的 FileSystemRights:

  • 完全控制(select 所有粗略权限):
    • 完全控制(所有文件系统权限,包括同步)
  • 修改(还有 selects 读取和执行、列出文件夹内容、读取、写入):
    • 修改
    • 同步
  • 读取和执行(还有 selects 列出文件夹内容,读取):
    • 读取并执行
    • 同步
  • 列出文件夹内容:
    • 读取并执行
    • 同步
  • 阅读:
    • 阅读
    • 同步
  • 写:
    • 写入
    • 同步

这些是您可以在高级权限对话框中设置的细化权限及其包括的文件系统权限:

  • 完全控制:
    • 完全控制(所有文件系统权限,包括同步)
  • 遍历文件夹/执行文件:
    • 执行文件
    • 同步
  • 列出文件夹/读取数据:
    • 读取数据
    • 同步
  • 读取属性:
    • 读取属性
    • 同步
  • 读取扩展属性:
    • 读取扩展属性
    • 同步
  • 创建文件/写入数据:
    • 创建文件
    • 同步
  • 创建文件夹/追加数据:
    • 附加数据
    • 同步
  • 写入属性:
    • 写入属性
    • 同步
  • 写入扩展属性:
    • 写入扩展属性
    • 同步
  • 删除子文件夹和文件:
    • 删除子目录和文件
    • 同步
  • 删除:
    • 删除
    • 同步
  • 读取权限:
    • 读取权限
    • 同步
  • 更改权限:
    • 更改权限
    • 同步
  • 取得所有权:
    • 取得所有权
    • 同步

请注意,有一些 FileSystemRights 由于其位掩码而包含其他权限。这些对应于您可以在粗略权限对话框中设置的权限。 FileSystemRights 值及其包括的其他值:

  • 阅读:
    • 读取权限
    • 读取属性
    • 读取扩展属性
    • ListDirectory/ReadData
  • 读取并执行(读取+执行文件):
    • 读取权限
    • 读取属性
    • 读取扩展属性
    • ListDirectory/ReadData
    • ExecuteFile/Traverse
  • 写:
    • 写入属性
    • 写入扩展属性
    • CreateDirectories/AppendData
    • CreateFiles/WriteData
  • 修改(ReadAndExecute + Write + Delete):
    • 读取权限
    • 读取属性
    • 读取扩展属性
    • ListDirectory/ReadData
    • ExecuteFile/Traverse
    • 写入属性
    • 写入扩展属性
    • CreateDirectories/AppendData
    • CreateFiles/WriteData
    • 删除
  • FullControl:包括所有。

还有一些 FileSystemRights 共享相同的值并且可以互换使用。他们是:

  • 列表目录,读取数据:1
  • 创建文件,写入数据:2
  • 创建目录,追加数据:4
  • 执行文件,遍历:32