Information on new Windows 10 error: ERROR_CLOUD_FILE_ACCESS_DENIED

Information on new Windows 10 error: ERROR_CLOUD_FILE_ACCESS_DENIED

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

有问题的机器是 Windows 10 Professional。它是 运行 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 共享中的文件,则您将无法使用此解决方案。您需要请求文件所有者授予您请求的访问权限。