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

时间:2012-06-01 02:28:14

标签: c++ winapi acl file-permissions

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

例如,我有一个文件unreadable.txt。如果我拒绝为当前用户对unreadable.txt的写访问权限,则访问掩码正确显示我没有写访问权限。但是,如果我拒绝拒绝“Authenticated Users”组的写访问权限,则访问掩码意味着我具有完全访问权限(我没有)。

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

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

这有什么好的解决方案吗?似乎应该存在一种更简单的方法来实现这一点,而不是实际尝试读取/写入有问题的文件。

2 个答案:

答案 0 :(得分:2)

根据AccessCheck上的知识库文章的建议,改为使用Limitations of the GetEffectiveRightsFromAcl API

答案 1 :(得分:1)

尝试使用CreateFile以所需模式打开文件 - 如果成功,则表示您拥有访问权限。你实际上不必向文件写任何东西,只需立即关闭它。