Condividi tramite


File Flussi (file system locali)

Un flusso è una sequenza di byte. Nel file system NTFS i flussi contengono i dati scritti in un file e che offrono maggiori informazioni su un file rispetto a attributi e proprietà. Ad esempio, è possibile creare un flusso contenente parole chiave di ricerca o l'identità dell'account utente che crea un file.

Ogni flusso associato a un file ha dimensioni di allocazione, dimensioni effettive e lunghezza dei dati valida:

  • Le dimensioni di allocazione sono la quantità di spazio su disco riservata a un flusso.
  • La dimensione effettiva è il numero di byte utilizzati da un chiamante.
  • La lunghezza dei dati valida (VDL) è il numero di byte inizializzati dalle dimensioni di allocazione per il flusso.

Ogni flusso mantiene anche il proprio stato per la compressione, la crittografia e la sparsezza. L'attributo FILE_ATTRIBUTE_SPARedizione Standard_FILE nel file viene impostato nel membro dwFileAttributes della struttura WIN32_FIND_DATA restituito dalle funzioni FindFirstFile, FindFirstFileEx e FindNextFile se uno dei flussi è mai stato di tipo sparse. GetFileAttributes, GetFileAttributesEx, GetFileAttributesTransacted, GetFileInformationByHandle e GetFileInformationByHandleEx restituiscono lo stato sparse del flusso di dati predefinito se non viene specificato alcun flusso.

Non esistono tempi di file associati a un flusso. Gli orari di file per un file vengono aggiornati quando un flusso in un file viene aggiornato.

I blocchi opportunistici vengono mantenuti per flusso. Le modalità di condivisione vengono mantenute anche per ogni flusso. Quando si richiede l'accesso all'eliminazione in un file, il sistema operativo verifica l'accesso all'eliminazione in tutti i flussi aperti in un file. Se un altro processo ha aperto un flusso senza l'autorizzazione FILE_SHARE_DELETE , non è possibile aprire il file per l'accesso all'eliminazione.

Se un file copiato dispone di un flusso di dati e viene usato il reindirizzamento di rete, il file può essere copiato solo se il client dispone dell'autorizzazione di lettura e degli attributi di lettura.

Convenzioni di denominazione per Flussi

Se specificato dalla riga di comando della shell di Windows, il nome completo di un flusso è "filename:stream name:stream type", come nell'esempio seguente: "myfile.dat:stream1:$DATA".

Anche i caratteri legali per un nome file sono validi per il nome del flusso, inclusi gli spazi. Per altre informazioni, vedere Denominazione di un file. Il tipo di flusso (detto anche codice di tipo attributo) è interno al file system NTFS. Gli utenti non possono quindi creare nuovi tipi di flusso, ma possono aprire i tipi di file system NTFS esistenti. I valori dell'identificatore del tipo di flusso iniziano sempre con il simbolo del dollaro ($). Vedere di seguito per un elenco dei tipi di flusso.

Per impostazione predefinita, il flusso di dati predefinito è senza nome. Per specificare completamente il flusso di dati predefinito, usare "filename::$DATA", dove $DATA è il tipo di flusso. Equivale a "filename". È possibile creare un flusso denominato nel file usando le convenzioni di denominazione dei file. Si noti che "$DATA" è un nome di flusso legale. Ad esempio, il nome completo di un flusso denominato "$DATA" in un file denominato "sample" sarà "sample:$DATA:$DATA". Se è stato creato un flusso denominato "bar" nello stesso file, il nome completo sarà "sample:bar:$DATA".

Quando si creano e si usano file con nomi di un carattere, anteporre il nome del file con il punto seguito da una barra rovesciata (.) o usare un nome di percorso completo. Il motivo è che Windows considera i nomi di file di un carattere come lettere di unità. Quando viene specificata una lettera di unità con un percorso relativo, i due punti separano la lettera di unità dal percorso. Quando si verifica un'ambiguità sul fatto che un nome di un carattere sia una lettera di unità o un nome di file, Windows presuppone che sia una lettera di unità se la stringa che segue i due punti è un percorso valido, anche se la lettera di unità non è valida.

Tipi di flusso

Di seguito è riportato l'elenco dei tipi di flusso NTFS, detti anche codici di tipo attributo. Alcuni tipi di flusso sono interni a NTFS e il relativo formato non è documentato.

Tipo di flusso Descrizione
::$ATTRIBUTE_LIST Contiene un elenco di tutti gli attributi che costituiscono il file e identificano dove si trova ogni attributo.
::$BITMAP Bitmap utilizzata dagli indici per gestire lo spazio disponibile dell'albero B per una directory. L'albero b viene gestito in blocchi di 4 KB (indipendentemente dalle dimensioni del cluster) e viene usato per gestire l'allocazione di questi blocchi. Questo tipo di flusso è presente in ogni directory.
::$DATA Flusso di dati. Il flusso di dati predefinito non ha alcun nome. I flussi di dati possono essere enumerati usando le funzioni FindFirstStreamW e FindNextStreamW.
::$EA Contiene i dati degli attributi estesi.
::$EA_INFORMATION Contiene informazioni di supporto sugli attributi estesi.
::$FILE_NAME Nome del file, in caratteri Unicode. Questo include il nome breve del file e tutti i collegamenti rigidi.
::$INDEX_ALLOCATION Tipo di flusso di una directory. Usato per implementare l'allocazione del nome file per directory di grandi dimensioni. Questo flusso rappresenta la directory stessa e contiene tutti i dati della directory. Le modifiche apportate ai flussi di questo tipo vengono registrate nel journal delle modifiche NTFS. Il nome di flusso predefinito di un tipo di flusso $INDEX_ALLOCATION è $I 30, quindi "DirName", "DirName::$INDEX_ALLOCATION" e "DirName:$I 30:$INDEX_ALLOCATION" sono tutti equivalenti.
::$INDEX_ROOT Questo flusso rappresenta la radice dell'albero b di un indice. Questo tipo di flusso è presente in ogni directory.
::$LOGGED_UTILITY_STREAM Simile a ::$DATA ma le operazioni vengono registrate nel journal delle modifiche NTFS. Usato da EFS e NTFS transazionale (TxF). La coppia ":StreamName:$StreamType" per EFS è ":$EFS:$LOGGED_UTILITY_STREAM" e per TxF è ":$TXF_DATA:$LOGGED_UTILITY_STREAM".
::$OBJECT_ID ID a 16 byte usato per identificare il file per il servizio di rilevamento dei collegamenti.
::$REPARedizione Standard_POINT Dati del reparse point .

 

Uso di Flussi