c++ - 有关新 Windows 10 错误 : ERROR_CLOUD_FILE_ACCESS_DENIED 的信息

标签 c++ winapi filesystems ntfs

使用 CreateFile() 打开文件进行读取时遇到新的 Windows 10 错误代码。我们收到错误 395,但关于它的含义或如何解决的信息很少。 Windows 10 SDK报错详情如下

  • 错误号395
  • 错误常量 ERROR_CLOUD_FILE_ACCESS_DENIED
  • 操作系统错误消息“访问 云文件被拒绝。”

有问题的机器是 Windows 10 专业版。它正在运行 OneDrive,但文件不在 OneDrive 文件夹下。我们怀疑 OneDrive 可能正在使用它的 Known Folder Move特征

用于打开文件的代码是:

HANDLE hnd = ::CreateFile(fname,
        GENERIC_READ,
        FILE_SHARE_READ,
        NULL,
        OPEN_EXISTING,
        FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_SEQUENTIAL_SCAN,
        NULL);
if (hnd == INVALID_HANDLE_VALUE) {
    DWORD exitcode = ::GetLastError();
    printf("%d\n", exitcode);
    }

如果有人遇到此问题,我们将不胜感激您可以分享任何见解。

最佳答案

经过仔细研究,我们发现这是由一个简单的权限问题引起的。执行 CreateFile() 调用的用户进程无权访问存储在云中的文件。 OneDrive 的 Known File Move 在我们没有意识到的情况下导致文件夹存储在云端。

一旦我们意识到这是一个云权限问题,修复云权限以允许用户进程打开文件就很简单了。

在我们的特定案例中,我们安排以管理员 身份运行我们的进程,这使得我们对CreateFile() 的调用能够成功。如果您尝试访问存储在另一用户所有的 OneDrive 共享中的文件,则您将无法使用此解决方案。您需要请求文件所有者授予您请求的访问权限。

关于c++ - 有关新 Windows 10 错误 : ERROR_CLOUD_FILE_ACCESS_DENIED 的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55419092/

相关文章:

c++ - 在 C++ 中类名后使用冒号

c - 如何等待窗口标题更新?

boost - boost文件系统可以更改文件的只读属性吗?

unix - 理解 inode 的概念

C++ 从远程控制台应用程序检索内容

C++:正则表达式:返回完整字符串和不匹配的组

c++ - 在 Win32 C++ 中调用未导出的函数

c++ - 为什么不按默认构建的路径划分路径只需在 Visual Studio 中添加尾随分隔符?

c++ - 关于 ofstream 的模棱两可的警告,但不是 ostream 的警告。有什么不同?

c++ - 单个 VirtualAlloc 分配使用的内存(和其他资源)