Windows 检查文件写入权限时,文件属性只读与使用访问控制列表之间的关系是什么?

Windows 检查文件写入权限时,文件属性只读与使用访问控制列表之间的关系是什么?,windows,winapi,file-io,dos,Windows,Winapi,File Io,Dos,例如,一方面,我可以检查 如果可以通过为用户建立安全标识符来写入文件 设立受托人 获取离散访问控制列表和 然后获取访问掩码 最后检查它是否包含文件\通用\写入位 另一方面,我可以 调用GetFileAttributes和 查看返回值是否==文件属性\u只读 对于后一种情况,如果设置了这个属性,我想这意味着我不必为ACL的东西操心。还是我遗漏了其他一些微妙之处 是不是GetFileAttributes返回DOS信息,而访问控制列表函数是较新的windows api?我应该检查这两个吗 干杯

例如,一方面,我可以检查

  • 如果可以通过为用户建立安全标识符来写入文件
  • 设立受托人
  • 获取离散访问控制列表和
  • 然后获取访问掩码
  • 最后检查它是否包含文件\通用\写入位
另一方面,我可以

  • 调用GetFileAttributes和
  • 查看返回值是否==文件属性\u只读
对于后一种情况,如果设置了这个属性,我想这意味着我不必为ACL的东西操心。还是我遗漏了其他一些微妙之处

是不是GetFileAttributes返回DOS信息,而访问控制列表函数是较新的windows api?我应该检查这两个吗

干杯


Ben.

文件属性与ACL没有关系

您可以拥有对其具有完全权限的“只读”文件,也可以拥有完全无权访问的非只读文件。 您还可以拥有非只读文件,并且可以完全访问这些文件;由于只读介质,无法写入。 此外,任何具有(写)文件访问权限的人也可以删除只读标志


查看是否可以写入文件的最佳方法是尝试写入文件(或者至少打开文件进行写入)。

谢谢。因此,如果file属性设置为file_ATTRIOBUTE_READONLY,但ACL指示完全权限,这是否意味着我可以写入它?很遗憾,尝试查看是否可以写入该文件不是一个选项。不,如果该文件被标记为只读,则ACL所述内容无关紧要。如果不先删除只读属性,仍然无法对其进行写入。ACL起作用的地方是它决定是否可以删除只读属性。@BenJ一切都需要允许写入才能允许写入。如果任何一个标志(ACL、属性、媒体等)说它是只读的,那么它就是只读的。注意——但是,我很困惑,如果权限可以简单地存储在ACL中,为什么会决定windows应该使用属性标志呢。更奇怪的是,即使属性标志指示文件是只读的,ACL也可以指示写访问。因为它们早于ACL,并且仍然有其用途。我可能希望文件暂时只读,并且不想干扰安全设置。判断是否可以写入文件的最佳方法是写入文件并查看是否出现错误。当您实际尝试写入文件时,此时尝试确定文件是否可写入的任何操作都可能是过时的信息。而且,您永远无法预测其他文件系统和未来版本的操作系统的规则可能会发生怎样的变化。例如,请注意,您没有考虑文件共享模式。