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

C++ 如何使用Windows API正确检查对文件的有效读/写访问?,c++,winapi,acl,file-permissions,C++,Winapi,Acl,File Permissions,我曾尝试使用GetEffectiveRightsFromAcl执行此操作,但它没有为由于我所属的组而被拒绝的文件返回正确的访问掩码 例如,我有一个文件,unreadable.txt。如果我拒绝当前用户对unreadable.txt的写访问,访问掩码将正确显示我没有写访问权限。但是,如果我拒绝“Authenticated Users”组的写访问,则访问掩码意味着我具有完全访问权限(我没有) 我的替代方法是手动迭代Ace列表,并将我的SID与每个条目进行比较,但我无法找到一种干净或简单的方法来检查A

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

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

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

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


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

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

请按照上的知识库文章的建议使用。

该文件可能不存在,在这种情况下,由包含该文件的文件夹决定。我应该澄清这一点。如果另一个应用程序试图同时访问该文件,这可能会造成竞争条件,导致用户体验不稳定。我有过很多不受欢迎的经历,我无法编辑或删除文件,因为某些应用程序暂时打开了这些文件。如果有其他权限/ACL覆盖了某个组,则拒绝该组并不一定会拒绝该组的某个成员。我认为“更具体”(用户权限)覆盖“不太具体”(组权限)。不过我可能错了。