为什么不设置FileSystemRights Synchronize权限?

6 .net security multithreading synchronization ntfs

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

不过,FileSystemRights.Synchronize有一个例外。从文档中:

指定应用程序是否可以等待文件句柄与 I/O 操作的完成同步。

或者正如其他人所解释的:

同步权限允许或拒绝不同的线程等待文件或文件夹的句柄,并与可能向其发出信号的另一个线程同步。此权限仅适用于多线程、多进程程序。

所以我的问题是:

  1. 上述澄清是否正确?
  2. 如果是,为什么设置同步权限(如果授予读取访问权限)?

小智 9

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

  1. 是的,这是正确的。引用 Microsoft 高级编辑权限对话框中的“权限输入对话框”帮助屏幕:

[同步​​] 允许或拒绝不同的线程等待文件或文件夹的句柄,并与可能向其发出信号的另一个线程同步。此权限仅适用于多线程、多进程程序。

  1. 您无法通过用户界面设置同步权限。它总是与其他权利一起设置。仅使用 .Net API(很可能还有其他 API)您可以选择不设置同步权限。

这些是您可以在权限对话框中设置的粗略权限,它们包括:

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

这些是您可以在高级权限对话框中设置的细化权限以及它们包括的 FileSystemRights:

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

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

  • 读:
    • 读取权限
    • 读取属性
    • 读取扩展属性
    • 列表目录/读取数据
  • 读取并执行(读取+执行文件):
    • 读取权限
    • 读取属性
    • 读取扩展属性
    • 列表目录/读取数据
    • 执行文件/遍历
  • 写:
    • 写属性
    • 写入扩展属性
    • 创建目录/追加数据
    • 创建文件/写入数据
  • 修改(读取并执行+写入+删除):
    • 读取权限
    • 读取属性
    • 读取扩展属性
    • 列表目录/读取数据
    • 执行文件/遍历
    • 写属性
    • 写入扩展属性
    • 创建目录/追加数据
    • 创建文件/写入数据
    • 删除
  • 完全控制:包括全部。

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

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