NTFS альтернативные потоки данных

Сегодня я видел, что эта странная волшебная система NTFS поддерживает: каждый файл может иметь несколько потоков данных. В основном можно иметь файл a.txt размером 0b, но в этом потоке данных может быть скрыто любое количество байтов. Это волшебство, строго связанное с NTFS, и я не вижу какой-либо благородной причины иметь эти потоки вокруг. Вы можете искать потоки NTFS с помощью streams Утилита от Sysinternals. Это покажет вам, что в основном каждый из этих противных thumbs.db файлы идут с дополнительным потоком данных.

Хорошо, теперь я видел эту магическую работу в системе Windows NT4, потоки добавлялись в файлы, копировались, удалялись (с помощью вышеупомянутой утилиты), но сейчас я пытаюсь сделать это дома в своей системе Win XP, но хотя Я могу обнаружить существующие потоки, не могу отобразить их содержимое, не могу создать новые или что-то еще, когда использую filename:streamname синтаксис.

Я получаю эту ошибку:

Неверный синтаксис имени файла, имени каталога или метки тома.

Пример: вывод из утилиты потоков:

c:\DOWNLOADS>streams.exe -s .

Streams v1.56 - Enumerate alternate NTFS data streams
Copyright (C) 1999-2007 Mark Russinovich
Sysinternals - www.sysinternals.com

c:\DOWNLOADS\1013.pdf:
   :Zone.Identifier:$DATA       46

c:\DOWNLOADS>type 1013.pdf:Zone.Identifier
The filename, directory name, or volume label syntax is incorrect.

Почему я не могу отобразить содержимое альтернативного потока данных?

Глядя на документацию Microsoft " Как использовать альтернативные потоки данных NTFS", я вижу, что это применимо к моей операционной системе, хотя они упоминают, что эти потоки не будут поддерживаться в будущем. Кто-нибудь может пролить свет на это?

6 ответов

Решение

От всей души: потоки данных NTFS были введены в Windows NT 4.0 и были у всех потомков (исключая потомков win-95: 98, Me). В XP, Vista и Win 7 они все еще существуют. Пока версии Windows поддерживают NTFS, они будут поддерживать файловые потоки. Они будут поддерживать NTFS еще долго.

Ваша ошибка описана на странице, которую вы показываете в своем вопросе. type Команда не понимает потоки. Использование:

more < 1013.pdf:Zone.Identifier

Работа с потоками

Microsoft имеет только несколько команд, которые работают с потоками, на самом деле, только <, > работать с потоками, и, таким образом, могут использоваться только команды, которые могут работать с этими операторами перенаправления. Я написал пару постов в блоге о альтернативных потоках данных о том, как вы все еще можете управлять потоками только этими командами.

Потоки будут работать только с программами, предназначенными для работы с ними, просто потому, что с ними нужно обращаться особым образом (сравните точки соединения, также особенность NTFS, но драйвер скрывает детали, и программы не должны делать ничего особенного: они просто считайте точку соединения реальным файлом).

При попытке открыть поток файлов с помощью start filename:streamname и программа говорит что-то вроде "недопустимое имя файла" или "файл не найден", и вы уверены, что имя потока правильное, тогда, скорее всего, программа не поддерживает потоки. Я заметил, что Notepad, Wordpad и Word/Excel правильно работают с потоками, хотя Word и Excel считают файлы опасными. Вот несколько экспериментов, которые вы можете попробовать.


ПРИМЕЧАНИЕ: вы, кажется, считаете альтернативные потоки данных странными. Они странные, потому что они настолько скрыты, но многие основные файловые системы (HFS, NSS) имеют это, и концепция восходит к началу 80-х годов. Фактически первоначально потоки были добавлены в NTFS для взаимодействия с другими файловыми системами.

Кстати, вы можете открыть AltDataStream с помощью блокнота:

notepad.exe 1013.pdf:Zone.Identifier

Также вы можете указать тип AltDataStream (не только с помощью Блокнота, это "полное имя потока"):

1013.pdf:Zone.Identifier:$DATA

Это строго NTFS магия

Не так - в Mac OS они были с тех пор, в этом мире они называются вилками, и вы бы использовали ResEdit для их получения. Классическое их использование - объединение медиаресурсов вместе с исполняемым файлом.

Одна возможная цель для альтернативного потока: метаданные. Для документа можно добавить большое описание, не затрагивая содержание исходного файла.

Win32 API отлично справляется с наименованием альтернативных потоков.

CMD, с другой стороны, делает какой-то прикольный разбор имени файла, когда возможно иметь */? расширение и barfs, когда присутствует ":". Вот почему копирование и ввод не удаются, но простое перенаправление работает.

Ошибка буквально означает, что она не распознается как альтернативный поток данных, а указанная вами ссылка содержит определенный символ, который не допускается в имени пути (:; другие символы не допускаются, включая \\,/, так далее).

Пытаться:

start this_is_a.txt:ads.exe

Другие вопросы по тегам