如何使用 Windows API 正确检查对文件的有效读/写访问

How can I correctly check for effective read/write access to a file using Windows API?

本文关键字:文件 有效 写访问 检查 Windows 何使用 API      更新时间:2023-10-16

>我尝试使用 GetEffectiveRightsFromAcl 执行此操作,但它没有为由于我所属的组而拒绝我的文件返回正确的访问掩码。

例如,我有一个文件,unreadable.txt .如果我拒绝当前用户对unreadable.txt的写入访问权限,则访问掩码会正确显示我没有写入访问权限。但是,如果我拒绝"经过身份验证的用户"组的写入访问权限,则访问掩码意味着我具有完全访问权限(我没有)。

我的替代方法是手动迭代 Ace 列表并将我的 SID 与每个条目进行比较,但我无法找到一种干净或简单的方法来检查 Ace 是否适用于某个组,以及当前用户是否属于该组。

作为扩展名,该文件可能不存在(即它是一个即将写入的新文件),在这种情况下,需要检查对目录的访问。

有什么好的解决方案吗?似乎应该有一种更简单的方法来做到这一点,而无需实际尝试读取/写入相关文件。

改用 AccessCheck,按照知识库文章 GetEffectiveRightsFromAcl API 的限制所建议的那样。

只需尝试使用CreateFile以所需模式打开文件 - 如果成功,您就知道您拥有访问权限。您实际上不必向文件写入任何内容,只需立即关闭它即可。