struttura FILE_STREAM_INFORMATION (ntifs.h)
La struttura FILE_STREAM_INFORMATION viene usata per enumerare i flussi per un file.
Sintassi
typedef struct _FILE_STREAM_INFORMATION {
ULONG NextEntryOffset;
ULONG StreamNameLength;
LARGE_INTEGER StreamSize;
LARGE_INTEGER StreamAllocationSize;
WCHAR StreamName[1];
} FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
Members
NextEntryOffset
Offset della voce di FILE_STREAM_INFORMATION successiva. Questo membro è zero se nessun'altra voce segue questa.
StreamNameLength
Lunghezza, in byte, della stringa StreamName .
StreamSize
Dimensioni, in byte, del flusso.
StreamAllocationSize
Dimensioni di allocazione del flusso di file, in byte. In genere questo valore è un multiplo del settore o delle dimensioni del cluster del dispositivo fisico sottostante.
StreamName[1]
Stringa Unicode che contiene il nome del flusso.
Commenti
La struttura FILE_STREAM_INFORMATION viene usata per enumerare i flussi per un file. Questa operazione può essere eseguita in uno dei modi seguenti:
Chiamando FltQueryInformationFile o ZwQueryInformationFile e specificando FileStreamInformation per il parametro FileInformationClass . In caso di restituzione, il buffer FileInformation contiene una struttura FILE_STREAM_INFORMATION per ogni flusso di file.
Inviando una richiesta di IRP_MJ_QUERY_INFORMATION al file system e specificando FileStreamInformation per il parametro FileInformationClass . In caso di restituzione, Irp-AssociatedIrp.SystemBuffer> contiene una struttura FILE_STREAM_INFORMATION per ogni flusso di file.
Non sono necessari diritti di accesso specifici per eseguire query su queste informazioni. Queste informazioni sono quindi disponibili finché il file è aperto.
Il supporto per l'enumerazione del flusso dipende dal file system. Se un file system non supporta l'enumerazione del flusso, deve restituire STATUS_INVALID_PARAMETER o STATUS_NOT_IMPLEMENTED per queste richieste.
Se un file system supporta l'enumerazione di flusso, ma il file non ha flussi diversi dal flusso di dati predefinito, senza nome, il file system deve restituire una singola struttura FILE_STREAM_INFORMATION contenente "::$DATA" o una stringa Unicode di lunghezza zero come StreamName.
NTFS restituisce "::$DATA" come StreamName per il flusso di dati predefinito.
Per un flusso di dati denominato, NTFS aggiunge ":$DATA" al nome del flusso. Ad esempio, per un flusso di dati utente con il nome "Authors", NTFS restituisce ":Authors:$DATA" come StreamName.
Quando si chiama una routine come ZwCreateFile per aprire un flusso di file denominato, è possibile omettere la parte ":$DATA" del nome. Ad esempio, per aprire il flusso "Autori" di un file denominato "Book", il chiamante può specificare "Book:Authors" o "Book:Authors:$DATA" come nome del flusso. Entrambi i nomi sono equivalenti.
Le dimensioni del buffer passate nel parametro FileInformation a FltQueryInformationFile o ZwQueryInformationFile devono essere almeno sizeof (FILE_STREAM_INFORMATION). Se questo buffer non è sufficientemente grande da contenere una struttura FILE_STREAM_INFORMATION per ogni flusso di file, FltQueryInformationFile o ZwQueryInformationFile restituisce STATUS_BUFFER_OVERFLOW o STATUS_BUFFER_TOO_SMALL. Poiché tale chiamata a FltQueryInformationFile o ZwQueryInformationFile non restituisce le dimensioni del buffer necessarie, i driver di filtro devono effettuare una o più chiamate aggiuntive a FltQueryInformationFile o ZwQueryInformationFile, passando un buffer più grande in ogni chiamata, fino a quando il buffer non è sufficientemente grande.
Il supporto per i flussi di dati denominati è specifico del file system. I driver di filtro del file system possono determinare se un file system supporta flussi denominati in uno dei modi seguenti:
Chiamando FltQueryVolumeInformation o ZwQueryVolumeInformationFile e specificando FileFsAttributeInformation per il parametro FsInformationClass . In caso di restituzione, il buffer FsInformation contiene una struttura FILE_FS_ATTRIBUTE_INFORMATION. Se il bit FILE_NAMED_STREAMS è impostato nel membro FileSystemAttributes di questa struttura, il file system supporta flussi denominati.
Inviando una richiesta di IRP_MJ_QUERY_VOLUME_INFORMATION al file system e specificando FileFsAttributeInformation per il parametro FsInformationClass . In caso di restituzione, Irp-AssociatedIrp.SystemBuffer> contiene una struttura FILE_FS_ATTRIBUTE_INFORMATION. Se il bit FILE_NAMED_STREAMS è impostato nel membro FileSystemAttributes di questa struttura, il file system supporta flussi denominati.
La struttura FILE_STREAM_INFORMATION deve essere allineata su un limite LONGLONG (8 byte). Se un buffer contiene due o più di queste strutture, il valore NextEntryOffset in ogni voce, ad eccezione dell'ultimo, cade su un limite di 8 byte.
Requisiti
Requisito | Valore |
---|---|
Intestazione | ntifs.h (include Ntifs.h, Fltkernel.h) |