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