Hostwinds Blog

Cerca risultati per:


Stream di Windows NTFS Immagine in primo piano

Stream di Windows NTFS

di: Karlito Bonnevie  /  Maggio 24, 2022


Dal 1995, Microsoft Windows Ntfs Il file system ha flussi supportati.In effetti, tutti i "file" di NTF sono in realtà flussi.Ciò che normalmente pensiamo come un file in NTFS è più precisamente chiamato un flusso di dati predefinito.Un flusso di dati predefinito è senza nome.Cos'è un flusso di dati senza nome?Prendi in considerazione il formato di file file completamente qualificato NTFS:

file-name:stream-name:stream-type

Da sinistra a destra, abbiamo:

  • nome del file: Il nome del "file" (ovvero flusso di dati predefinito).
  • Stream-name: Il nome di qualsiasi flusso di dati alternativo (denominato) allegati nome del file (Un file può avere più flussi).
  • tipo streaming: Per qualsiasi flusso, indica il suo tipo, con $ dati i più comuni.Un flusso di dati di tipo $ può contenere qualsiasi cosa che un file normale può contenere.Per un elenco di possibili tipi di flusso, vedere Tipi di streaming.

Segue un esempio:

myTextFile.txt

Questo è un flusso di dati predefinito.Come accennato, i flussi di dati predefiniti sono senza nome.Questo può essere visto nel suo modulo di nome file completamente qualificato:

myTextFile.txt::$DATA

Il fatto che non ci sia nulla tra i due punti (: :) indica che si tratta di un flusso di dati senza nome.Per un flusso di dati predefinito, non è necessario utilizzare il nome file completamente qualificato, anche se possiamo.Ad esempio, dal prompt dei comandi di Windows, i seguenti due comandi aprono esattamente lo stesso flusso di dati predefinito:

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

Per semplificare le cose, useremo il termine "file" al posto del "flusso di dati predefinito" più accurato.

È possibile creare un flusso denominato in un file utilizzando NTF normali Convenzioni di denominazione.Ad esempio, dal prompt dei comandi, esegui quanto segue:

notepad foo.docx:bar.txt

Selezionare Alla domanda se si desidera creare un nuovo file.Successivamente, digita il seguente contenuto:

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

Salva ed esci Blocco note.

Quando esegui il comando dir, vedrai un file chiamato foo.docx la cui dimensione, interessante, è 0 byte.Tuttavia, quando si esegue il comando dir /r, vedrai il flusso di dati denominato appena creato, la cui dimensione è 80 byte:

Queste due dimensioni del flusso hanno senso in quel flusso foo.docx non ha contenuti mentre lo streaming foo.docx: bar.txt ha 80 byte di contenuti.Per aiutare a chiarire questo, aggiungi alcuni contenuti al flusso di dati predefinito, come segue:

notepad foo.docx

Immettere il seguente testo:

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

Salva ed esci Blocco note.

Esegui di nuovo Dir /R e si noti che il flusso di dati predefinito Foo.docx ora contiene 120 byte di dati:

Per questo motivo, possiamo dire che i due flussi consumano 200 byte sul volume.Detto questo, l'esecuzione del comando dir disadorno fornisce informazioni in qualche modo fuorvianti - implica che foo.docx contiene solo 120 byte di dati, il che è inaccurato nel senso che quando elimini foo.docx, in realtà stai rilasciando 200 byte avolume come spazio libero disponibile:

del foo.docx
dir /r

La morale della storia, forse, è quella di usare sempre l'interruttore /R.Il che pone la domanda, come trovi tutti i file che contengono flussi "nascosti"?Quell'argomento è discusso in seguito.

Usando PowerShell per trovare flussi

Se consentiamo al termine "file" medio "flusso di dati predefiniti" e "flusso" medio "flusso di dati denominato", allora possiamo usare PowerShell per trovare tutti i file contenenti flussi come segue.

Apri un prompt dei comandi PowerShell ed esegui facoltativamente il seguente comando (questo sopprime i messaggi di errore negati e possibilmente fastidiosi):

$ErrorActionPreference = "SilentlyContinue"

Quindi, eseguire i seguenti comandi:

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

Per il volume corrente, questo restituisce un elenco di tutti i file contenenti uno o più flussi.Questa pipeline PowerShell è spiegata come segue:

  • Get -childitem -path \ -recurse
    A partire dalla directory root (cartella), ottiene tutti i file sul volume.
  • Get -item -stream *
    Ottiene tutti i flussi di dati associati a un file.I file (flussi di dati senza nome) restituiranno ": $ dati" come valore della proprietà del flusso.I flussi (flussi di dati denominati) restituiranno il nome del flusso come valore della proprietà del flusso (e ": $ dati non verranno restituiti).
  • Where -Object Stream -Ne ': $ Data'
    Rimuove tutti i file la cui proprietà del flusso è ": $ dati", lasciando così solo file contenenti uno o più flussi denominati.
  • Convertire percorso
    Output percorsi di file ben formattati.

Utilizzando PowerShell per eliminare i flussi

Da un prompt dei comandi PowerShell, è possibile rimuovere la barra di streaming.txt dal file foo.docx come segue:

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

Se il nome del flusso ha spazi, è necessario utilizzare le citazioni, come in:

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

Usando i flussi

L'intento originale dei flussi NTFS era abilitare l'interoperabilità dei file di Apple Macintosh, ma i flussi NTFS possono essere abbastanza utili.Ad esempio, potresti voler "incorporare" informazioni dettagliate all'interno dei file di fotografie di famiglia:

Se il file di immagine sopra è stato chiamato "nonno di Bob.png", è possibile aggiungere un flusso (usando PowerShell) contenente informazioni dettagliate sull'immagine, come 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."

Per visualizzare i metadati dell'immagine che hai semplicemente impostato, esegui:

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

Si noti che l'argomento -Stream richiede che tu sappia il nome esatto del flusso (i caratteri jolly non sono consentiti).Ricordiamo che puoi sempre ottenere nomi di streaming usando Get-Etim (che accetta i caratteri jolly):

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

Per il nome del flusso richiesto, guarda la proprietà del flusso nell'output risultante:

Altri usi per i flussi NTFS possono includere:

  • Archiviazione di parole chiave relative a un file.
  • Fornire informazioni di riepilogo per un file.
  • Associare caratteri e/o suoni con un file.
  • Praticamente qualsiasi metadati di file che ti viene in mente.

Infine, potresti aver notato che il tuo volume contiene un numero di flussi denominati Zone.Identificier.Questi flussi sono generalmente utilizzati da Windows per l'archiviazione delle zone di sicurezza URL, che determinano se un file deve essere attendibile o meno.Un esempio che mostra come visualizzare il contenuto di una zona. Stream di identificatore segue:

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

E tramite il prompt dei comandi di Windows:

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

Spero che tu abbia trovato questo articolo interessante;E forse troverai alcuni usi interessanti per l'avvio di NTFS.

Scritto da Karlito Bonnevie  /  Maggio 24, 2022