Я имею дело с приложением, которое сканирует файлы в месте (указанном по пути UNC) и собирает различные биты информации о них. Один из таких битов - это список альтернативных потоков файлов, который извлекается с помощью вызова NtQueryInformationFile(..., FileStreamInformation).

Это работает для несметного количества файлов, за исключением очень немногих - для тех немногих (в основном jpg исходящих от какой-то камеры, но также docx и zip), вызов функции которых завершается с ошибкой STATUS_END_OF_FILE. Я не могу найти объяснения почему. В том же каталоге (-ах) есть другие файлы, у которых нет такой проблемы, dir /r не показывает альтернативных потоков, copy работает нормально. Повреждение данных маловероятно.

Буду признателен за любые идеи, которые могут это объяснить. Спасибо.

Больше информации:

  • target находится на VNX 7500 (может быть, ошибка в их реализации SMB-сервера?)

  • NTFS

1
C.M. 15 Ноя 2017 в 22:44

1 ответ

Лучший ответ

Что-то пошло не так с альтернативными потоками. Перечислить их не удастся, но если вы скопируете файл - он прибудет в место назначения без каких-либо альтернативных потоков (и приложение работает с скопированным файлом без проблем). Я подозреваю, что операция копирования ОС молча игнорирует сбои, связанные с альтернативным потоком, и (если они случаются) не копирует их.

Таким образом, копирование файлов в другое место и их обратное копирование (перезапись оригиналов) решает проблему.

1
C.M. 17 Ноя 2017 в 17:32