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_INFORMATION
entrada 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 grawity
diz, 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_INFORMATION
atributo único da entrada MFT. As regras são um pouco complexas, mas resumidamente $STANDARD_INFORMATION
é o que importa e as $FILE_NAME
informaçõ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_NAME
atributos, assim como o ponto onde o atual sinalizadores de atributos podem ser propagados para os $FILE_NAME
atributos.
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 R
bit 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 R
novamente, de qualquer maneira, para fazer o arquivo ser lido. apenas novamente.