Alguém consegue entender o artigo "Hard Links and Junctions" do MSDN?

Alguém consegue entender o artigo "Hard Links and Junctions" do MSDN?

NoLinks físicos e junçõesArtigo do MSDN pode-se ler o seguinte:

Um link físico é a representação do sistema de arquivos de um arquivo pela qual mais de um caminho faz referência a um único arquivo no mesmo volume. Para criar um link físico, use a função CreateHardLink. Quaisquer alterações nesse arquivo ficam instantaneamente visíveis para os aplicativos que o acessam por meio dos links físicos que o referenciam. Entretanto, o tamanho da entrada de diretório e as informações de atributos são atualizados apenas para o link por meio do qual a alteração foi feita. Observe que os atributos no arquivo são refletidos em cada link físico para esse arquivo e as alterações nos atributos desse arquivo são propagadas para todos os links físicos. Por exemplo, se você redefinir o atributo READONLY em um link físico para excluir esse link físico específico e houver vários links físicos para o arquivo real, será necessário redefinir o bit READONLY no arquivo de um dos links físicos restantes para traga o arquivo e todos os links físicos restantes de volta ao estado READONLY.

Alguém consegue entender o parágrafo acima?
Não é a declaraçãoatributos no arquivo são refletidos em cada link físico para esse arquivoequivalente à declaraçãoalterações nos atributos desse arquivo se propagam para todos os links físicos?
Por quêredefinindobit READOONLY podetraga o arquivo e todos os links físicos restantes de volta ao estado READONLY?

EDITAR

Depois de ler a excelente resposta do JdeBP a esta pergunta, ainda fico com dúvidas.

Entendo que há uma cópia parcial da $STANDARD_INFORMATIONentrada do MFT para cada link físico apontando para esta entrada que, de acordo com a respostanem mesmo é mantido atualizado, a menos que um link físico seja renomeado, criado ou destruído. O que acontece quando alguém lê atributos de um link físico? Acho que a cópia deste link físico $STANDARD_INFORMATIONé ignorada, pois pode não refletir o estado atual e os atributos estão sendo lidos diretamente da entrada do MFT $STANDARD_INFORMATION. Além disso, durante esse processo, nenhuma informação é atualizada, pois não se trata de nenhuma das operações listadas. É assim?

Se alguém desativar o bit R para permitir a exclusão de um link físico para o arquivo, então (presumindo que esse não foi o último link) será necessário ativar o bit R novamente, de qualquer maneira, para tornar o arquivo somente leitura novamente.

Agora, eu não entendopresumindo que esse não foi o último linkpapel. Não vejo como o link ser o último faz alguma diferença aqui. Ainda existe um arquivo (entrada do MFT) e pode-se alterar seus atributos diretamente (não através de qualquer link). Ou será que, se houver um arquivo, haverá um link, o que significa que não há correspondência direta entre as entradas e os arquivos do MFT?

Responder1

Como grawitydiz, a segunda "redefinição" é uma escrita ruim ou um erro total.

Não é a declaraçãoatributos no arquivo são refletidos em cada link físico para esse arquivoequivalente à declaraçãoalterações nos atributos desse arquivo se propagam para todos os links físicos?

Não. O artigo está afirmando algo que talvez seja um detalhe de implementação muito grande para o seu público-alvo. No NTFS, cada entrada na MFT pode ter zero ou mais$FILE_NAME atributos. Eles registram o diretório pai e o nome nesse diretório para cada link físico para o arquivo. Mas elestambémregistrar sinalizadores de atributos de arquivo,emboraesses sinalizadores são registrados no $STANDARD_INFORMATIONatributo único da entrada MFT. As regras são um pouco complexas, mas resumidamente $STANDARD_INFORMATIONé o que importa e as $FILE_NAMEinformações nem sequer são mantidas atualizadas, a menos que um link físico seja renomeado, criado ou destruído - o que requer tocar nos $FILE_NAMEatributos, assim como o ponto onde o atual sinalizadores de atributos podem ser propagados para os $FILE_NAMEatributos.

Um desenvolvedor provavelmente explicou os detalhes sangrentos do NTFS ao autor técnico que escreveu o artigo do MSDN. Mas na verdade eles não têm qualquer relevância para um usuário final ou mesmo para um programador de aplicativos. Estes são detalhes internos de como o NTFS funciona. Da perspectiva do Win32, um arquivo/diretório tem exatamenteumconjunto de sinalizadores de atributos, e atualizá-lo é atualizá-lo, seja como for. Se alguém desativar o Rbit para permitir a exclusão de um link físico para o arquivo, então (presumindo que esse não foi o último link) será necessário ativá-lo Rnovamente, de qualquer maneira, para fazer o arquivo ser lido. apenas novamente.

informação relacionada