Может ли кто-нибудь разобраться в статье «Жесткие ссылки и соединения» из MSDN?

Может ли кто-нибудь разобраться в статье «Жесткие ссылки и соединения» из MSDN?

ВЖесткие связи и соединенияВ статье MSDN можно прочитать следующее:

Жесткая ссылка — это представление файла в файловой системе, с помощью которого более одного пути ссылаются на один файл в одном томе. Чтобы создать жесткую ссылку, используйте функцию CreateHardLink. Любые изменения в этом файле мгновенно становятся видны приложениям, которые обращаются к нему через жесткие ссылки, ссылающиеся на него. Однако размер записи каталога и информация об атрибутах обновляются только для ссылки, через которую было внесено изменение. Обратите внимание, что атрибуты файла отражаются в каждой жесткой ссылке на этот файл, и изменения атрибутов этого файла распространяются на все жесткие ссылки. Например, если вы сбросите атрибут READONLY на жесткой ссылке, чтобы удалить эту конкретную жесткую ссылку, и есть несколько жестких ссылок на фактический файл, то вам нужно будет сбросить бит READONLY на файле из одной из оставшихся жестких ссылок, чтобы вернуть файл и все оставшиеся жесткие ссылки обратно в состояние READONLY.

Может ли кто-нибудь понять смысл вышеприведенного абзаца?
Разве утверждение неатрибуты файла отражаются в каждой жесткой ссылке на этот файлэквивалентно утверждениюизменения атрибутов этого файла распространяются на все жесткие ссылки?
ПочемусбросREADONLY бит можетвернуть файл и все оставшиеся жесткие ссылки в состояние «ТОЛЬКО ДЛЯ ЧТЕНИЯ»?

РЕДАКТИРОВАТЬ

Прочитав превосходный ответ JdeBP на этот вопрос, у меня все еще остались сомнения.

Я понимаю, что существует частичная копия записи MFT $STANDARD_INFORMATIONдля каждой жесткой ссылки, указывающей на эту запись, которая, согласно ответу,даже не обновляется, если жесткая ссылка не переименована, не создана или не удалена. Что происходит, когда кто-то считывает атрибуты жесткой ссылки? Я полагаю, что копия этой жесткой ссылки $STANDARD_INFORMATIONигнорируется, поскольку она может не отражать текущее состояние, а атрибуты считываются напрямую из записи MFT $STANDARD_INFORMATION. Кроме того, во время этого процесса никакая информация не обновляется, поскольку это не какая-либо из перечисленных вами операций. Так ли это?

Если кто-то отключит бит R, чтобы разрешить удаление жесткой ссылки на файл, то (предполагая, что это не последняя ссылка) придется снова включить бит R любым способом, чтобы снова сделать файл доступным только для чтения.

Теперь я не понимаюпредполагая, что это не последняя ссылкачасть. Я не вижу, как то, что ссылка последняя, ​​имеет здесь какое-либо значение. Все еще есть сам файл (запись MFT), и можно напрямую (не через какую-либо ссылку) изменять его атрибуты. Или это так, что если есть файл, то есть и ссылка, что означает, что нет однозначного соответствия между записями MFT и файлами?

решение1

Как grawityговорится, вторая «перезагрузка» — это либо плохое написание, либо явная ошибка.

Разве это не утверждение?атрибуты файла отражаются в каждой жесткой ссылке на этот файлэквивалентно утверждениюизменения атрибутов этого файла распространяются на все жесткие ссылки?

Нет. Статья утверждает что-то, что, возможно, слишком подробно описывает реализацию для целевой аудитории. В NTFS каждая запись в MFT может иметь ноль или более$FILE_NAME атрибуты. Они записывают родительский каталог и имя в этом каталоге для каждой жесткой ссылки на файл. Но онитакжефлаги атрибутов файла записи,Несмотря на тоЭти флаги записываются в единственный $STANDARD_INFORMATIONатрибут записи MFT. Правила немного сложны, но, если коротко, то $STANDARD_INFORMATIONэто то, что имеет значение, и $FILE_NAMEинформация даже не обновляется, если только жесткая ссылка не переименована, не создана или не уничтожена — что требует прикосновения к атрибутам $FILE_NAME, и поэтому является точкой, в которой текущие флаги атрибутов могут быть распространены на $FILE_NAMEатрибуты.

Разработчик, вероятно, объяснил кровавые подробности NTFS техническому автору, который написал статью MSDN. Но они на самом деле не имеют никакого отношения к конечному пользователю или даже к программисту приложений. Это внутренние подробности того, как работает NTFS. С точки зрения Win32 файл/каталог имеет ровноодиннабор флагов атрибутов, и обновление его является обновлением, как бы это ни было сделано. Если кто-то выключает бит R, чтобы разрешить удаление жесткой ссылки на файл, то (предполагая, что это была не последняя ссылка) нужно Rснова включить бит, каким-либо образом, чтобы снова сделать файл доступным только для чтения.

Связанный контент