В чем может быть причина ошибки Windows ERROR_DISK_FULL (112) при открытии альтернативного потока данных NTFS?

StackOverflow https://stackoverflow.com/questions/1606245

  •  05-07-2019
  •  | 
  •  

Вопрос

Мое приложение записывает несколько байтов данных в альтернативный поток данных.Это прекрасно работает на всех компьютерах, кроме одного (Windows Server 2003 SP2).Вместо этого CreateFile возвращает ERROR_DISK_FULL когда я пытаюсь создать альтернативный поток данных (в корневом каталоге).Я не нахожу причины такого результата, потому что...

  • На этом диске достаточно места.

  • Диск отформатирован в NTFS (из-за GetVolumeInformation).

  • Накопитель поддерживает текущие данные потоки (из-за GetVolumeInformation).

Редактировать:Я могу предоставить еще немного информации о том, в чем причина не является:Я добавил много потоков в тестовую систему, которая не показывала ошибку, и задался вопросом, может ли ошибка возникнуть.Этого не произошло.Вместо этого примерно после 2000 потоков с длинными именами файлов возникла другая ошибка, которая сохранялась:1450 (ОШИБКА_NO_SYSTEM_RESOURCES).

Редактировать:Вот пример одного из используемых имен файлов:

char szStreamFileName[] = "C:\\:abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnoqrstuvwxyz012345";

Редактировать:Наш клиент использует на этом сервере корпоративное антивирусное программное обеспечение Avira.Возможно, причина в этом (вредоносные программы могут злоупотреблять альтернативными потоками данных).

Это было полезно?

Решение

После открытия обращения в службу поддержки в MS я знаю, что был установлен флаг только для чтения, который можно установить (и сбросить) только с недокументированными функциями Windows.Никто не знает, кто установил этот флаг и почему, но я отправил им изображение накопителя (после того, как получил устройство от нашего клиента), и они с этим разобрались.У нас есть обходной путь только в нашем приложении (мы используем другое местоположение, если обнаруживаем эту ошибку).Между тем мы знаем, что у некоторых наших клиентов есть эта проблема.

Другие советы

Существуют ли какие-либо сжатые / запасные файлы или альтернативные потоки данных?

Часто приложения резервного копирования получают ошибки ERROR_DISK_FULL при попытке создать резервную копию сжатых файлов, и это вызывает некоторую путаницу, когда на диске все еще остается несколько гигабайт свободного места.При копировании сжатых файлов также могут возникать другие проблемы.Цель этого блога - дать читателю более полное представление о том, что на самом деле происходит при сжатии файлов NTFS.

От Понимание сжатия NTFS

Просто выстрел вслепую, но правильно ли установлены права?

Просто еще одна возможность...

Вы проверили количество открытых в данный момент файлов в вашей операционной системе?Операционная система поддерживает макс.количество зарезервированных дескрипторов файлов после этого отчета ERROR_DISK_FULL или ERROR_NO_SYSTEM_RESOURCES.

И вторая возможность...Корневой каталог ограничен количеством файлов.Насколько я помню, 512 файлов в старых версиях ОС.Но NTFS поддерживает неограниченное количество файлов в root!

Возможно, вы захотите посмотреть, что такое что-то вроде Монитор процесса Sysinternal утилита захватывает данные при попытке создать этот файл - в нем отображаются коды возврата различных API, задействованных в стеке ввода-вывода, и один из них может дать вам ключ к пониманию того, почему вам возвращается 112.Надеюсь, уровень детализации в ProcMon достаточен - если нет, я предполагаю, что есть другие, более подробные средства трассировки ввода-вывода для Windows (но я не знаю о них с самого начала)

Имя файла, которое вы указываете, является

char szStreamFileName[] = "C:\\:abcdefghijklm...

все начинается с

C:\\:

Это опечатка в сообщении, или действительно после косой черты стоит двоеточие?Я думаю, что это незаконное имя файла.

Если вы попытаетесь скопировать файл размером более 2 ГБ из другой файловой системы (NTFS) в FAT / FAT32 с ограничением в 2 ГБ, вы можете увидеть эту ошибку.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top