Condividi tramite


struttura FILE_STREAM_INFORMATION (ntifs.h)

La struttura FILE_STREAM_INFORMATION viene utilizzata 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;

Membri

NextEntryOffset

Offset della voce 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 delle dimensioni del settore o del cluster del dispositivo fisico sottostante.

StreamName[1]

Stringa Unicode contenente il nome del flusso.

Osservazioni

La struttura FILE_STREAM_INFORMATION viene utilizzata 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 di 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 dispone di 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 "Authors" 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 di FILE_STREAM_INFORMATION per ogni flusso di file, FltQueryInformationFile o ZwQueryInformationFile restituisce STATUS_BUFFER_OVERFLOW o STATUS_BUFFER_TOO_SMALL. Poiché tale chiamata non riuscita 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 FileSystemAttributes membro di questa struttura, il file system supporta i flussi denominati.

  • Inviando una richiesta IRP_MJ_QUERY_VOLUME_INFORMATION al file system e specificando FileFsAttributeInformation per il parametro FsInformationClass. Al ritorno, Irp->AssociatedIrp.SystemBuffer contiene una struttura FILE_FS_ATTRIBUTE_INFORMATION. Se il bit FILE_NAMED_STREAMS è impostato nel FileSystemAttributes membro di questa struttura, il file system supporta i 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 NextEntryOffset valore in ogni voce, tranne l'ultimo, cade su un limite di 8 byte.

Fabbisogno

Requisito Valore
intestazione ntifs.h (include Ntifs.h, Fltkernel.h)

Vedere anche

FltQueryInformationFile

FltQueryVolumeInformation

IRP_MJ_QUERY_INFORMATION

IRP_MJ_QUERY_VOLUME_INFORMATION

ZwCreateFile

ZwQueryInformationFile

ZwQueryVolumeInformationFile