Hostwinds Blog

Resultados da busca por:


Fluxos do Windows NTFS Imagem em destaque

Fluxos do Windows NTFS

por: Karlito Bonnevie  /  Maio 24, 2022


Desde 1995, o Microsoft Windows NTFS O sistema de arquivos suportou fluxos.De fato, todos os "arquivos" do NTFS são realmente fluxos.O que normalmente pensamos como um arquivo no NTFS é mais precisamente chamado de fluxo de dados padrão.Um fluxo de dados padrão não tem nome.O que é um fluxo de dados sem nome?Considere o formato de nome de arquivo totalmente qualificado do NTFS:

file-name:stream-name:stream-type

Da esquerda para a direita, temos:

  • nome do arquivo: O nome do "arquivo" (ou seja, fluxo de dados padrão).
  • nome do fluxo: O nome de qualquer fluxo de dados alternativo (nomeado) anexado a nome do arquivo (Um arquivo pode ter vários fluxos).
  • Tipo de fluxo: Para qualquer fluxo, indica seu tipo, com os dados de $ sendo os mais comuns.Um fluxo de dados do tipo $ pode conter qualquer coisa que um arquivo normal possa conter.Para uma lista de possíveis tipos de fluxo, consulte Tipos de fluxo.

Um exemplo a seguir:

myTextFile.txt

Este é um fluxo de dados padrão.Como mencionado, os fluxos de dados padrão não têm nome.Isso pode ser visto em seu formulário de nome de arquivo totalmente qualificado:

myTextFile.txt::$DATA

O fato de não haver nada entre os dois pontos (: :) indica que este é um fluxo de dados sem nome.Para um fluxo de dados padrão, não precisamos usar o nome do arquivo totalmente qualificado, embora possamos.Por exemplo, no prompt de comando do Windows, os dois comandos a seguir abrem precisamente o mesmo fluxo de dados padrão:

notepad myTextFile.txt
notepad myTextFile.txt::$DATA

Para simplificar as coisas, usaremos o termo "arquivo" no lugar do "fluxo de dados padrão" mais preciso.

Você pode criar um fluxo nomeado em um arquivo usando NTFs normais Convenções de nomeação.Por exemplo, a partir do prompt de comando, execute o seguinte:

notepad foo.docx:bar.txt

Selecione sim Quando perguntado se você deseja criar um novo arquivo.Em seguida, digite o seguinte conteúdo:

This is the named stream "bar.txt" that is in (attached to) the file "foo.docx".

Salvar e sair do bloco de notas.

Quando você executa o comando dir Dir, você verá um arquivo chamado Foo.docx, cujo tamanho, curiosamente, é 0 bytes.No entanto, quando você executa o comando dir /r, verá o fluxo de dados nomeado que acabou de criar, cujo tamanho é de 80 bytes:

Esses dois tamanhos de fluxo fazem sentido nesse fluxo foo.docx não tem conteúdo enquanto o stream foo.docx: bar.txt possui 80 bytes no conteúdo.Para ajudar a elucidar isso, adicione algum conteúdo ao fluxo de dados padrão, como segue:

notepad foo.docx

Digite o seguinte texto:

This is the default data stream (file) named "foo.docx", which has one named data stream attached to it, called "bar.txt".

Salvar e sair do bloco de notas.

Execute dir /r novamente e observe que o fluxo de dados padrão foo.docx agora contém 120 bytes de dados:

Por esse motivo, podemos dizer que os dois fluxos consomem 200 bytes no volume.Dito isto, a execução do comando DIR sem adornos fornece informações um pouco enganosas - isso implica que foo.docx contém apenas 120 bytes de dados, o que é impreciso no sentido de que quando você exclui foo.docx, você está realmente liberando 200 bytes de volta paraVolume como espaço livre disponível:

del foo.docx
dir /r

A moral da história, talvez, é sempre usar o interruptor /r.O que levanta a pergunta: como você encontra todos os arquivos que contêm fluxos "ocultos"?Esse tópico é discutido a seguir.

Usando PowerShell para encontrar fluxos

Se deixarmos o termo "arquivo" significa "fluxo de dados padrão" e "fluxo" significa "stream de dados nomeados", podemos usar o PowerShell para encontrar todos os arquivos contendo fluxos da seguinte forma.

Abra um prompt de comando do PowerShell e, opcionalmente

$ErrorActionPreference = "SilentlyContinue"

Em seguida, execute os seguintes comandos:

Get-ChildItem -Path \ -Recurse | Get-Item -Stream * | Where-Object Stream -ne ':$DATA' | Convert-Path

Para o volume atual, isso retorna uma lista de todos os arquivos que contêm um ou mais fluxos.Este pipeline PowerShell é explicado da seguinte forma:

  • Get -Childitem -Path \ -recurse
    A partir do diretório raiz (pasta), obtém todos os arquivos no volume.
  • Get -item -stream *
    Obtém todos os fluxos de dados associados a um arquivo.Os arquivos (fluxos de dados não identificados) retornarão ": $ dados" como o valor da propriedade Stream.Os fluxos (denominados fluxos de dados) retornarão o nome do fluxo como o valor da propriedade Stream (e ": $ dados não serão retornados).
  • Onde fluxo de objeto -ne ': $ dados'
    Remove todos os arquivos cuja propriedade de fluxo é ": $ dados", deixando assim apenas arquivos contendo um ou mais fluxos nomeados.
  • Converter caminho
    Saídas bem formatadas caminhos de arquivo.

Usando PowerShell para excluir fluxos

De um prompt de comando PowerShell, você pode remover a barra de fluxo.txt do arquivo foo.docx da seguinte forma:

Remove-Item -Path .\foo.docx -Stream bar.txt

Se o nome do fluxo tiver espaços, você deverá usar cotações, como em:

Remove-Item -Path ".\Bob's Grandfather.png" -Stream "Image Info.txt"

Usando fluxos

A intenção original dos fluxos NTFS era ativar a interoperabilidade do arquivo Apple Macintosh, mas os fluxos NTFs podem ser bastante úteis.Por exemplo, você pode querer "incorporar" informações detalhadas nos arquivos de fotografias de família:

Se o arquivo de imagem acima foi nomeado "Bob's avfather.png", você poderá adicionar um fluxo (usando o PowerShell) contendo informações detalhadas da imagem, como segue:

Set-Content -Path ".\Bob's Grandfather.png" -Stream "image-info.txt" -Value "This is Bob's grandfather (on his mother's side) in the Gold Rush Bar and Restaurant in Seattle, WA - circa 1856."

Para ver os metadados da imagem que você acabou de definir, execute:

Get-Content -Path ".\Bob's Grandfather.png" -Stream "image-info.txt"

Observe que o argumento -flure exige que você saiba o nome exato do fluxo (os curingas não são permitidos).Lembre-se de que você sempre pode obter nomes de fluxos usando get-item (que aceita curingas):

Get-Item -Path '.\Bob''s Grandfather.png' -Stream *

Para o nome de fluxo procurado, consulte a propriedade Stream na saída resultante:

Outros usos para fluxos de NTFS podem incluir:

  • Armazenando palavras -chave relacionadas a um arquivo.
  • Fornecendo informações de resumo para um arquivo.
  • Associando fontes e/ou sons a um arquivo.
  • Praticamente qualquer metadado de arquivo que você possa imaginar.

Por fim, você deve ter observado que seu volume contém vários fluxos denominados zone.Identifier.Esses fluxos são geralmente usados pelo Windows para o armazenamento de zonas de segurança do URL, que determinam se um arquivo deve ser confiável ou não.Um exemplo mostrando como visualizar o conteúdo de uma zona.

Get-Content -Path .\sanders.net-May-2022.gz -Stream Zone.Identifier

E através do prompt de comando do Windows:

notepad sanders.net-May-2022.gz:Zone.Identifier

Felizmente, você achou este artigo interessante;E talvez você encontre alguns usos interessantes para os fluxos NTFs inicializarem.

Escrito por Karlito Bonnevie  /  Maio 24, 2022