c - 使用 GENERIC_ALL 访问权限在 ProjectedFS 中打开文件(投影文件系统)

标签 c windows winapi filesystems internals

我使用Projected File System创建了示例应用程序

我已经实现了所有必要的功能,当我从具有 GENERIC_READ 或 GENERIC_WRITE 访问权限的投影 FS 打开文件时,它运行良好,但当我尝试使用 GENERIC_ALL 时,我收到访问被拒绝错误。

出现访问被拒绝错误的可能原因是什么? 当文件已复制到投影文件系统时,我收到错误。

代码:

HANDLE fHandle = CreateFile(path_to_file_in_projected_fs, GENERIC_ALL, 0, 0, OPEN_EXISTING, 0, 0);

预期结果:有效的文件句柄。

实际结果:无效句柄,出现访问被拒绝错误(通过 GetLastError())

附注GENERIC_READ_WRITE_EXECUTE 工作正常

HANDLE fHandle = CreateFile(path_to_file_in_projected_fs, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);

最佳答案

Is GENERIC_ALL equivalent to GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE? GENERIC_ALL 表示“所有可能的访问级别”(对于文件,其名称为 FILE_ALL_ACCESS)。它不仅仅是 GENERIC_EXECUTE + GENERIC_WRITE + GENERIC_READGENERIC_ALL 还包含诸如 DELETE 之类的内容、WRITE_DAC(更改权限)和WRITE_OWNER(更改所有者)。您可以查看File Security and Access Rights用于访问 FILE_GENERIC_*

您可以尝试从GENERIC_READ+WRITE+EXECUTE中一一添加权限,看看是哪些权限导致了问题。 但是,您应该仅请求实际需要的访问级别

关于c - 使用 GENERIC_ALL 访问权限在 ProjectedFS 中打开文件(投影文件系统),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55819130/

相关文章:

关键部分示例 - 它有效吗?

c - printf 不打印特殊字符

c - 如何通过c中的文件处理访问文件夹中的特定文件

Windows 更新代理 API - 搜索更新

c++ - 如何使用 Win32 API 创建线程?

c - Arduino串口阅读

windows - 查找Windows操作系统版本的VB6代码

java - 损坏的 Java Swing 窗口

c++ - 查找 DNS 服务器和网关的 IP 和 MAC 地址

winapi - 在 Rust 中实现 IWbemObjectSink 接口(interface)