Информация о новой ошибке Windows 10: ОШИБКА CLOUD_FILE_ACCESS_DENIED

#c #winapi #filesystems #ntfs

#c #winapi #файловые системы #ntfs

Вопрос:

Сталкиваюсь с новым кодом ошибки Windows 10, открывающим файл для чтения с помощью CreateFile() . Мы получаем ошибку 395, но имеется скудная информация о том, что это значит или как устранить. Сведения об ошибке из Windows 10 SDK следующие

  • Номер ошибки 395
  • Постоянная ошибка ERROR_CLOUD_FILE_ACCESS_DENIED
  • Сообщение об ошибке операционной системы «Доступ к облачному файлу запрещен».

Рассматриваемый компьютер — Windows 10 Professional. Запущен OneDrive, но файл не находится в папке OneDrive. Мы подозреваем, что OneDrive может использовать свою известную функцию перемещения папки

Код, используемый для открытия файла, является:

 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("%dn", exitcode);
    }
  

Если кто-нибудь сталкивался с этой проблемой, мы были бы признательны за любую информацию, которой вы можете поделиться.

Комментарии:

1. просто ошибка, возвращаемая драйвером фильтра cldflt.sys (c000cf18). вы пытаетесь открыть файл, система возвращает вам ошибку и отказывает в доступе к нему. как есть

2. Вы имеете в виду, что использование Createfile для доступа к существующим файлам на OneDrive запрещено и сообщается об ошибке 395, верно?

3. Если возможно, ссылка, на которую вы можете сослаться: windowsreport.com/onedrive-access-denied-error

Ответ №1:

После тщательного исследования мы обнаружили, что это было вызвано простой проблемой с разрешениями. Пользовательский процесс, выполняющий CreateFile() вызов, не имел разрешений на доступ к файлу, который хранился в облаке. В OneDrive Known File Move , без нашего ведома, папка была сохранена в облаке.

Как только мы поняли, что это проблема с облачными разрешениями, было просто исправить облачное разрешение, чтобы позволить пользовательскому процессу открывать файл.

В нашем конкретном случае мы договорились запустить наш процесс от имени администратора, что позволило нашему вызову CreateFile() завершиться успешно. Если вы пытаетесь получить доступ к файлу, хранящемуся в общей папке OneDrive, принадлежащей другому пользователю, вы не сможете использовать это решение. Вам нужно будет попросить владельца файла предоставить вам запрашиваемый доступ.