
Допустим, есть файл articles.txt, созданный вчера. Его удаляют. Через несколько секунд в той же папке создают совсем другой файл с именем article.txt. И вот странность: в свойствах Windows сообщает, что новый файл создан вчера.
Как и многое в Windows, этой особенности уже десятки лет, и это не баг. У неё даже есть запоминающееся название: tunnelling.
Сам механизм называется File System Tunnelling. Это особенность NTFS и FAT: если удалить или переименовать файл, а затем быстро создать в той же папке другой файл с тем же именем, новый файл унаследует метаданные, например время создания исходного файла или сопоставление короткого и длинного имени.
Но зачем Windows сознательно выдаёт новый файл за старый? Мы изучили официальную документацию, чтобы найти ответ.
Windows недолго помнит удалённый файл
В документации Microsoft по FileSystemInfo.CreationTime сказано: “Диски, отформатированные в NTFS, могут на короткое время кэшировать метаинформацию о файлах, например время создания. Этот процесс называется file tunneling”.
Инженер Microsoft Рэймонд Чен писал об этом в 2005 году и провёл забавную аналогию с квантовым туннелированием, откуда и взялось название.
В квантовой механике туннелированием называют ситуацию, когда частица оказывается по другую сторону энергетического барьера, хотя энергии на его преодоление у неё нет.
Чен пошутил, что метаданные файлов в Windows проделывают тот же трюк: исчезают с одной стороны и появляются с другой.
“В случае с file system tunneling речь идёт об информации, которая как будто нарушает законы классической механики. Информация была уничтожена (при удалении или переименовании файла), но каким-то образом восстановилась по другую сторону временного барьера.”
Он также отметил, что разработчик Windows 95, создавший этот механизм, увлёкся аналогией и назвал внутренние структуры данных кварками.
Как работает File System Tunnelling
-
Когда файл удаляют или переименовывают, Windows создаёт запись в tunnel cache.
-
Если в течение короткого промежутка времени в том же каталоге создать файл с тем же именем, Windows применит к нему кэшированные метаданные (время создания, сопоставление SFN/LFN).
-
Кэш существует отдельно для каждого тома и автоматически очищает старые записи при заполнении.
Опасений насчёт приватности и безопасности здесь нет: удалённый файл исчезает, и его содержимое не возвращается. Windows сохраняет на 15 секунд только метаданные, а именно время создания и связь между длинным именем файла и коротким именем в формате 8.3.
К тому же кэш не вечен. Он привязан к каталогу, существует временно и срабатывает только тогда, когда нужные операции create или rename происходят внутри его окна. Новый файл не унаследует старую метку времени только потому, что его имя совпало с чем-то удалённым месяц назад.
Для тех, кто беспокоится о восстановлении удалённых файлов после сброса Windows, в Cloud Rebuild появилась новая опция Data Sanitization.
Как бы то ни было, главный вопрос в другом: зачем file system tunnelling вообще нужен?
Microsoft создала туннелирование не для того, чтобы запутать пользователей
Когда документ, созданный вчера, правят в Word и сохраняют, ожидается, что файл сохранит исходную дату создания: его редактировали, а не создавали заново.
Однако, как отмечает Чен, “внутри многие программы сохраняют файл через комбинацию операций save, delete и rename”.
То есть многие приложения не изменяют существующий файл на месте. Программа может создать временный файл с обновлённым содержимым, удалить оригинал, а затем переименовать временный файл в исходное имя. Такой подход называют safe save.
С точки зрения пользователя это обычное редактирование и сохранение документа. Но Windows видит создание, удаление и переименование файла.
Без туннелирования файл-замена внезапно получил бы новую дату создания, хотя нового документа никто не создавал.
Причина не единственная. Другой пример Чена касается старых программ, которые понимали только короткие имена в формате 8.3. Если такая программа заменяла “File with long name.txt”, не сохраняя связь длинного и короткого имени, файл мог полностью потерять понятное имя и остаться с коротким именем из эпохи DOS.
В 16-битных приложениях доступны только короткие имена файлов (SFN). Туннелирование сохраняет связь между SFN и LFN (длинными именами), когда файлы переименовывают или создают заново.
По сути, file system tunneling нужен, чтобы поддерживать схему safe save, которую используют приложения, и сохранять совместимость коротких имён 8.3 с длинными.
Какие пары операций приводят к туннелированию имени файла
В документации Microsoft по FltGetTunneledName механизм описан как tunnel cache для каждого тома. Там перечислены пары операций, которые запускают туннелирование.
-
delete(name) / create(name)
-
delete(name) / rename(source, name)
-
rename(name, newname) / create(name)
-
rename(name, newname) / rename(source, name)
Кому интересно, в старой статье базы знаний Microsoft, написанной для Windows NT и XP, рассказано, как через реестр изменить или отключить 15-секундное окно кэша туннелирования.
Так что если новый файл вдруг сообщает, что ему несколько дней, Windows, скорее всего, не сломана. Она просто ведёт себя так, как задумано в Microsoft.





Пока нет комментариев. Будьте первым!