Compartilhar via


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 fornece mais informações sobre um arquivo do que atributos e propriedades. Por exemplo, você pode criar um fluxo que contém 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 tamanho de dados válido (VDL) é o número de bytes que são inicializados a partir do tamanho de alocação para o fluxo de dados.

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 membro dwFileAttributes da estrutura WIN32_FIND_DATA retornada das funções FindFirstFile, FindFirstFileEx e FindNextFile se algum dos fluxos tiver sido esparso. GetFileAttributes, GetFileAttributesEx, GetFileAttributesTransacted, GetFileInformationByHandle e 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.

Bloqueios oportunistas são mantidos por fluxo. Os modos de compartilhamento também são mantidos para cada 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 o 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 na linha de comando do shell do Windows, o nome completo de um fluxo é "filename:stream name:stream type", como no exemplo a seguir: "myfile.dat:stream1:$DATA".

Todos os caracteres que são 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 Nomenclatura de um arquivo. O tipo de fluxo (também chamado de código de tipo de atributo) é interno para o 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 de sinal de dólar ($). Veja abaixo uma lista de tipos de fluxo.

Por padrão, o fluxo de dados padrão não tem nome. Para especificar totalmente o fluxo de dados padrão, use "filename::$DATA", em que $DATA é o tipo de fluxo. Isso é o equivalente a "filename". 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 "sample" seria "sample:$DATA:$DATA". Se você criou um fluxo chamado "barra" no mesmo arquivo, seu nome completo seria "sample:bar:$DATA".

Ao criar e trabalhar com arquivos com nomes de um caractere, prefixe o nome do arquivo com o período seguido por uma barra invertida (.) ou use um nome de caminho totalmente qualificado. O motivo 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á ambiguidade sobre se um nome de um único caractere é uma letra de unidade ou um nome de arquivo, o Windows pressupõe que seja uma letra de unidade se a sequência de caracteres após o dois-pontos for um caminho válido, mesmo que essa letra de 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 para o NTFS e seu formato não está documentado.

Tipo de fluxo Descrição
::$ATTRIBUTE_LIST 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 de banco de dados para gerenciar o espaço livre de b-tree em um diretório. A árvore b é gerenciada em partes de 4 KB (independentemente do tamanho do cluster) e isso é usado para gerenciar a alocação dessas partes. Esse tipo de fluxo está presente em todos os diretórios.
::$DATA Fluxo de dados. O fluxo de dados padrão não tem nome. Fluxos de dados podem ser enumerados usando as funções FindFirstStreamW e FindNextStreamW .
::$EA Contém dados de atributos estendidos.
::$EA_INFORMATION Contém informações de suporte sobre os Atributos Estendidos.
::$FILE_NAME O nome do arquivo, em caracteres Unicode. Isso inclui o nome curto do arquivo, bem como os links rígidos.
::$INDEX_ALLOCATION O tipo de fluxo de um diretório. Usado para implementar a alocação de nome de arquivo para diretórios grandes. Esse fluxo representa o próprio diretório e contém todos os dados do diretório. As alterações em fluxos desse tipo são registradas no diário de alterações do NTFS. O nome do fluxo padrão de um tipo de fluxo $INDEX_ALLOCATION é $I 30 para que "DirName", "DirName::$INDEX_ALLOCATION" e "DirName:$I 30:$INDEX_ALLOCATION" sejam todos equivalentes.
::$INDEX_ROOT Esse fluxo representa a raiz da árvore b de um índice. Esse 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 do NTFS. Usado por EFS e NTFS transacional (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 links.
::$REPARSE_POINT Os dados do ponto de reanálise.

Usando fluxos

Convenções de nomenclatura de arquivo

NTFS Transacional (TxF)