如何使用 Windows API 正确检查对文件的有效读/写访问
How can I correctly check for effective read/write access to a file using Windows API?
>我尝试使用 GetEffectiveRightsFromAcl
执行此操作,但它没有为由于我所属的组而拒绝我的文件返回正确的访问掩码。
例如,我有一个文件,unreadable.txt
.如果我拒绝当前用户对unreadable.txt
的写入访问权限,则访问掩码会正确显示我没有写入访问权限。但是,如果我拒绝"经过身份验证的用户"组的写入访问权限,则访问掩码意味着我具有完全访问权限(我没有)。
我的替代方法是手动迭代 Ace 列表并将我的 SID 与每个条目进行比较,但我无法找到一种干净或简单的方法来检查 Ace 是否适用于某个组,以及当前用户是否属于该组。
作为扩展名,该文件可能不存在(即它是一个即将写入的新文件),在这种情况下,需要检查对目录的访问。
有什么好的解决方案吗?似乎应该有一种更简单的方法来做到这一点,而无需实际尝试读取/写入相关文件。
改用 AccessCheck,按照知识库文章 GetEffectiveRightsFromAcl API 的限制所建议的那样。
只需尝试使用CreateFile
以所需模式打开文件 - 如果成功,您就知道您拥有访问权限。您实际上不必向文件写入任何内容,只需立即关闭它即可。
相关文章:
- WinVerifyTrust 仅在使用文件而不是内存 blob 时才有效
- 如何在C++中写入 1000 个文件时有效地缓冲
- 为什么TinyXML2的XMLDocument::FirstChild()函数在尝试解析这个有效的XML文件时返回NULL?
- 用于随机数据访问的最有效文件类型
- 如何知道文本文件中的输入是否是 C++ 中的有效数字
- 如何检查字符串格式在读取C++文本文件时是否有效?
- 为什么使用_access时只读测试对读写文件有效
- free():在有效指针异常中-使用流读取巨大文件时
- 如何在C#或C++中获取文件或文件夹的有效权限?有什么 API 吗?
- c++ - 将大文件记录处理到 cpp 容器的最有效方法
- 在 h 和 cpp 文件中单独声明和实现模板有时有效,有时会出现链接器错误
- 有效地从文本文件中读取带有字符串索引的大型二维数组(矩阵)
- 如何有效地读取和存储 1GB 文本文件中的数据
- 如何检查给定文件是否是C++中的有效视频文件?
- 程序'main.exe'运行失败:指定的可执行文件不是此操作系统平台的有效应用程序
- C++,我正在尝试创建一个有效的.bmp输出文件
- 通过套接字发送二进制文件.文本文件有效,其他文件无效
- C++为什么在一种情况下保存到文件有效,而另一种情况则无效
- C++生成文件%.C有效,%.cpp无效
- 库文件有效,但 DLL 文件不起作用