NTFS хранит файл в виде коллекции потоков , которые также называются NTFS "атрибутами".Я предпочитаю использовать имя «поток», поскольку «атрибут» обычно относится к флагу атрибута файла в потоке файла $STANDARD_INFORMATION
, например «скрытый», «системный» и «только для чтения».Два типа потока, которые обычно используются непосредственно программами Windows, - это данные и индекс (т. Е. $DATA
и $INDEX_ALLOCATION
).
Файл NTFS всегда имеет поток данных по умолчанию (анонимный), например, «имя файла :: $ DATA» или, проще говоря, просто «имя файла».Он также может иметь альтернативные (именованные) потоки данных, такие как «имя файла: имя потока: $ DATA».Каталог может иметь именованные потоки данных, но не по умолчанию, поскольку его анонимный поток является индексом имени файла.Опция /r
команд CMD dir
вызывает FindFirstStreamW
и FindNextStreamW
для каждого файла или каталога в списке, чтобы вывести список $DATA
потоков.
AnКаталог NTFS имеет индекс $FILE_NAME
, который называется «$ I30», например, «dirname: $ I30: $ INDEX_ALLOCATION».Этот индекс также называется псевдонимом анонимно, например, "dirname :: $ INDEX_ALLOCATION" или, проще говоря, просто "dirname".Он может быть перечислен через FindFirstFile
и FindNextFile
.
Именованные индексы для других типов потоков также возможны.Например, том NTFS имеет индекс точки повторной обработки в своем зарезервированном каталоге «$ Reparse» по адресу «\ $ Extend \ $ Reparse: $ R: $ INDEX_ALLOCATION».Для перечисления этого индекса требуется специальный запрос к каталогу, поэтому FindFirstFile
использовать нельзя.FindFirstVolumeMountPoint
и FindNextVolumeMountPoint
перечисляют этот индекс для поиска точек монтирования на томе, то есть IO_REPARSE_TAG_MOUNT_POINT
повторных точек, которые нацелены на пути GUID тома.