Как вы используете альтернативные потоки данных и каковы преимущества?
Я прочитал некоторые документы о Alternate Data Streams
и я думаю об использовании их в моих собственных проектах. Однако у меня так много неизвестных знаний и открытых вопросов, которые у меня есть до того, как я решу их использовать. Вот почему я составил этот список вопросов:
- Как вы перечисляете Streams без инструмента Sysinternals
streams
? - Влияет ли поток на значение MD5 файла "Host"?
- Что произойдет, если я скопирую / обрежу файл "Host" в другой путь (NTFS)? Потоки тоже копируют / режут себя?
- Что произойдет, если я скопирую / обрежу файл "Host" в другой путь, который НЕ является NTFS?
- Возможно ли иметь другой поток в существующем потоке?
- Поскольку у вас будет фактический дескриптор файла для каждого потока, возможно ли изменить атрибуты потока?
- Могу ли я использовать
LoadLibrary
API для загрузки DLL из потока? - Можно ли выполнить (например,
ShellExecute
) поток? - Каковы преимущества / преимущества / недостатки использования
Alternate Data Streams
? - Что я должен быть осторожен, если я использую
Alternate Data Streams
?
Я с нетерпением жду ваших ответов / информации / резюме. Предпочтительным языком является Delphi, но подойдет любой другой язык, если он использует WinAPI
,
1 ответ
Многие ваши вопросы описаны здесь: http://flexhex.com/docs/articles/alternate-streams.phtml
Перечисление: Использование
NtQueryInformationFile
см. ссылку. Начиная с Windows Vista, вы также можете перечислять потоки в командной строке, используяdir /r
,Контрольные суммы. Поскольку при доступе к файлу по имени вы обычно открываете только безымянный поток данных, при вычислении контрольных сумм используется только содержимое этого потока.
Копирование в NTFS: Windows Explorer и утилита копирования командной строки копируют все потоки.
Копирование в другую ФС: альтернативные потоки данных теряются.
Вложенные потоки: Нет, файл просто состоит из списка потоков, они не могут быть вложенными.
Атрибуты: некоторые атрибуты основаны на файлах, некоторые (зашифрованные, сжатые, разреженные) основаны на потоке.
LoadLibrary
кажется, работает на альтернативных потоках данных.ShellExecute
на ADS не удалось сERROR_FILE_NOT_FOUND
(2) на моем компьютере.Обратите внимание, что теоретически возможно запустить ADS из командной строки:
type calc.exe > dummy.txt:calc
wmic process call create "dummy.txt:calc"
ADS полезны для хранения некритической информации, связанной с файлом. Например, исполняемые файлы, загруженные из Интернета, будут иметь ADS, что заставит Explorer отображать предупреждение перед выполнением файла.
Смотрите ссылку. В частности, не используйте их для важных данных.