Alguém pode entender o artigo “Hard Links and Junctions” do MSDN?

2

Em Links e Junções Difíceis , o artigo do MSDN pode ler o seguinte:

A hard link is the file system representation of a file by which more than one path references a single file in the same volume. To create a hard link, use the CreateHardLink function. Any changes to that file are instantly visible to applications that access it through the hard links that reference it. However, the directory entry size and attribute information is updated only for the link through which the change was made. Note that the attributes on the file are reflected in every hard link to that file, and changes to that file's attributes propagate to all the hard links. For example if you reset the READONLY attribute on a hard link to delete that particular hard link, and there are multiple hard links to the actual file, then you will need to reset the READONLY bit on the file from one of the remaining hard links to bring the file and all remaining hard links back to the READONLY state.

Alguém pode entender o parágrafo acima?
Não é a declaração atributos no arquivo são refletidos em cada link duro para esse arquivo equivalente à declaração muda para os atributos do arquivo propagar para todos os hard links ?
> Como é que resetar o READONLY bit pode trazer o arquivo e todos os hard links remanescentes de volta ao estado READONLY ?

EDITAR

Depois de ler a excelente resposta de JdeBP a essa pergunta, ainda tenho dúvidas.

Eu entendo que há uma cópia parcial da entrada $STANDARD_INFORMATION da MFT para cada link apontando para essa entrada, que de acordo com a resposta não é mantida atualizada, a menos que um link físico seja renomeado, criado ou destruído . O que acontece quando se lê atributos de um link físico? Eu acho que esta cópia do link duro de $STANDARD_INFORMATION é ignorada, pois pode não refletir o estado atual e os atributos estão sendo lidos diretamente da entrada da MFT, $STANDARD_INFORMATION . Além disso, durante este processo, nenhuma informação é atualizada, pois não é nenhuma das operações listadas. É assim?

If one sets the R bit off in order to enable deleting a hard link to the file, then (presuming that that wasn't the last link) one has to set the R bit back on again, in whatever way, to make the file read-only again.

Agora, eu não entendo a parte presumindo que esse não era o último link . Eu não vejo como o link sendo o último faz alguma diferença aqui. Ainda existe um arquivo (entrada da MFT) e pode-se alterar seus atributos diretamente (não através de qualquer link). Ou será que, se houver um arquivo, há um link que significa que não há correspondência de um para um entre as entradas e os arquivos da MFT?

    
por Piotr Dobrogost 08.09.2011 / 21:44

1 resposta

5

Como o grawity diz, o segundo "reset" é uma escrita ruim ou um erro total.

Isn't the statement attributes on the file are reflected in every hard link to that file equivalent to the statement changes to that file's attributes propagate to all the hard links?

Não. O artigo está declarando algo que talvez seja um detalhe de implementação demais para o 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 dentro desse diretório para cada link físico para o arquivo. Mas eles também registram sinalizadores de atributo de arquivo, mesmo que esses sinalizadores sejam registrados no único atributo $STANDARD_INFORMATION da entrada da MFT. As regras são um pouco complexas, mas coloque brevemente $STANDARD_INFORMATION o que importa e as informações de $FILE_NAME não são atualizadas, a menos que um link físico seja renomeado, criado ou destruído - o que exige tocar nos atributos $FILE_NAME , e assim é o ponto em que os flags do atributo atual podem ser propagados para os atributos $FILE_NAME .

Um desenvolvedor provavelmente explicou os detalhes sangrentos do NTFS para o autor técnico que escreveu o artigo do MSDN. Mas eles não têm relevância para um usuário final ou até mesmo para um programador de aplicativos. Estes são detalhes internos de como funciona o NTFS. Do ponto de vista do Win32, um arquivo / diretório tem exatamente um conjunto de flags de atributo, e atualizá-lo está atualizando-o, no entanto, isso é feito. Se você definir o R off para permitir a exclusão de um link físico para o arquivo, (presumindo que esse não era o último link), é necessário definir o R novamente, de qualquer forma, para tornar o arquivo somente leitura novamente.

    
por 10.09.2011 / 01:51