Fluxos de arquivos (sistemas de arquivos locais)
Um fluxo é uma sequência de bytes. No sistema de arquivos NTFS, os fluxos contêm os dados gravados em um arquivo e que fornecem mais informações sobre um arquivo do que atributos e propriedades. Por exemplo, você pode criar um fluxo que contenha palavras-chave de pesquisa ou a identidade da conta de usuário que cria um arquivo.
Cada fluxo associado a um arquivo tem seu próprio tamanho de alocação, tamanho real e comprimento de dados válido:
- O tamanho da alocação é a quantidade de espaço em disco reservada para um fluxo.
- O tamanho real é o número de bytes que estão sendo usados por um chamador.
- O comprimento de dados válido (VDL) é o número de bytes que são inicializados a partir do tamanho de alocação para o fluxo.
Cada fluxo também mantém seu próprio estado para compactação, criptografia e esparsidade. O atributo FILE_ATTRIBUTE_SPARSE_FILE no arquivo é definido no dwFileAttributes membro da estrutura WIN32_FIND_DATA retornada do FindFirstFile, FindFirstFileExe funções de FindNextFile se algum dos fluxos já tiver sido esparso. GetFileAttributes, GetFileAttributesEx, GetFileAttributesTransacted, GetFileInformationByHandlee GetFileInformationByHandleEx retornam o estado esparso do fluxo de dados padrão se nenhum fluxo for especificado.
Não há tempos de arquivo associados a um fluxo. Os tempos de arquivo de um arquivo são atualizados quando qualquer fluxo em um arquivo é atualizado.
Os bloqueios oportunistas são mantidos por fluxo. Os modos de compartilhamento também são mantidos por fluxo. Quando o acesso de exclusão é solicitado em um arquivo, o sistema operacional verifica se há acesso de exclusão em todos os fluxos abertos em um arquivo. Se outro processo tiver aberto um fluxo sem a permissão FILE_SHARE_DELETE, você não poderá abrir o arquivo para excluir acesso.
Se um arquivo que está sendo copiado tiver um fluxo de dados e o redirecionador de rede for usado, o arquivo só poderá ser copiado se o cliente tiver a permissão de leitura e a permissão de atributos de leitura.
Convenções de nomenclatura para fluxos
Quando especificado a partir da linha de comando do shell do Windows, o nome completo de um fluxo é "nome do arquivo:stream name:stream type", como no exemplo a seguir: "myfile.dat:stream1:$DATA".
Todos os caracteres legais para um nome de arquivo também são legais para o nome do fluxo, incluindo espaços. Para obter mais informações, consulte nomeando um arquivo. O tipo de fluxo (também chamado de código de tipo de atributo) é interno ao sistema de arquivos NTFS. Portanto, os usuários não podem criar novos tipos de fluxo, mas podem abrir tipos de sistema de arquivos NTFS existentes. Os valores do especificador de tipo de fluxo sempre começam com o símbolo do cifrão ($). Veja abaixo uma lista de tipos de fluxo.
Por padrão, o fluxo de dados padrão não tem nome. Para especificar completamente o fluxo de dados padrão, use "nome do arquivo::$DATA", onde $DATA é o tipo de fluxo. Isto é o equivalente a "nome do ficheiro". Você pode criar um fluxo nomeado no arquivo usando as convenções de nomenclatura de arquivo . Observe que "$DATA" é um nome de fluxo legal. Por exemplo, o nome completo de um fluxo chamado "$DATA" em um arquivo chamado "exemplo" seria "exemplo:$DATA:$DATA". Se você criou um fluxo chamado "bar" no mesmo arquivo, seu nome completo seria "exemplo:bar:$DATA".
Ao criar e trabalhar com arquivos com nomes de um caractere, prefixe o nome do arquivo com ponto seguido de uma barra invertida (.) ou use um nome de caminho totalmente qualificado. A razão para fazer isso é que o Windows trata nomes de arquivo de um caractere como letras de unidade. Quando uma letra de unidade é especificada com um caminho relativo, dois pontos separam a letra da unidade do caminho. Quando há uma ambiguidade sobre se um nome de um caractere é uma letra de unidade ou um nome de arquivo, o Windows assume que é uma letra de unidade se a cadeia de caracteres após os dois pontos for um caminho válido, mesmo que a letra da unidade seja inválida.
Tipos de fluxo
A seguir está a lista de tipos de fluxo NTFS, também chamados de códigos de tipo de atributo. Alguns dos tipos de fluxo são internos ao NTFS e seu formato não está documentado.
Tipo de fluxo | Descrição |
---|---|
::$ATTRIBUTE_LISTA | Contém uma lista de todos os atributos que compõem o arquivo e identifica onde cada atributo está localizado. |
::$BITMAP | Um bitmap usado por índices para gerenciar o espaço livre da árvore b para um diretório. A árvore b é gerenciada em blocos de 4 KB (independentemente do tamanho do cluster) e isso é usado para gerenciar a alocação desses blocos. Este tipo de fluxo está presente em todos os diretórios. |
::$DATA | Fluxo de dados. O fluxo de dados padrão não tem nome. Os fluxos de dados podem ser enumerados usando o FindFirstStreamW e funções de FindNextStreamW. |
::$EA | Contém dados de atributos estendidos. |
::$EA_INFORMAÇÃO | Contém informações de suporte sobre os atributos estendidos. |
::$FILE_NOME | O nome do arquivo, em caracteres Unicode. Isso inclui o nome curto do arquivo, bem como quaisquer links físicos. |
::$INDEX_ALOCAÇÃO | O tipo de fluxo de um diretório. Usado para implementar a alocação de nomes de arquivos para diretórios grandes. Este fluxo representa o próprio diretório e contém todos os dados do diretório. As alterações aos fluxos deste tipo são registadas no diário de alterações NTFS. O nome de fluxo padrão de um tipo de fluxo $INDEX_ALLOCATION é $I 30, portanto, "DirName", "DirName::$INDEX_ALLOCATION" e "DirName:$I 30:$INDEX_ALLOCATION" são todos equivalentes. |
::$INDEX_RAIZ | Este fluxo representa a raiz da árvore b de um índice. Este tipo de fluxo está presente em todos os diretórios. |
::$LOGGED_UTILITY_STREAM | Semelhante a ::$DATA mas as operações são registradas no diário de alterações NTFS. Usado pelo EFS e Transactional NTFS (TxF). O par ":StreamName:$StreamType" para EFS é ":$EFS:$LOGGED_UTILITY_STREAM" e para TxF é ":$TXF_DATA:$LOGGED_UTILITY_STREAM". |
::$OBJECT_ID | Um ID de 16 bytes usado para identificar o arquivo para o serviço de rastreamento de link. |
::$REPARSE_PONTO | O ponto de análise dados. |
Tópicos relacionados