Compartir a través de


estructura FILE_STREAM_INFORMATION (ntifs.h)

La estructura FILE_STREAM_INFORMATION se usa para enumerar las secuencias de un archivo.

Sintaxis

typedef struct _FILE_STREAM_INFORMATION {
  ULONG         NextEntryOffset;
  ULONG         StreamNameLength;
  LARGE_INTEGER StreamSize;
  LARGE_INTEGER StreamAllocationSize;
  WCHAR         StreamName[1];
} FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;

Miembros

NextEntryOffset

Desplazamiento de la siguiente entrada FILE_STREAM_INFORMATION. Este miembro es cero si ninguna otra entrada sigue esta.

StreamNameLength

Longitud, en bytes, de la cadena streamName de .

StreamSize

Tamaño, en bytes, de la secuencia.

StreamAllocationSize

Tamaño de asignación de secuencias de archivos, en bytes. Normalmente, este valor es un múltiplo del tamaño del sector o clúster del dispositivo físico subyacente.

StreamName[1]

Cadena Unicode que contiene el nombre de la secuencia.

Observaciones

La estructura FILE_STREAM_INFORMATION se usa para enumerar las secuencias de un archivo. Esta operación se puede realizar de cualquiera de las maneras siguientes:

  • Llamando a FltQueryInformationFile o ZwQueryInformationFile y especificando FileStreamInformation para el parámetro FileInformationClass. A cambio, el búfer de FileInformation contiene una estructura FILE_STREAM_INFORMATION para cada secuencia de archivos.

  • Enviando una solicitud de IRP_MJ_QUERY_INFORMATION al sistema de archivos y especificando FileStreamInformation para el parámetro fileInformationClass de . A cambio, Irp->AssociatedIrp.SystemBuffer contiene una estructura de FILE_STREAM_INFORMATION para cada secuencia de archivos.

No se requieren derechos de acceso específicos para consultar esta información. Por lo tanto, esta información está disponible siempre que el archivo esté abierto.

La compatibilidad con la enumeración de secuencias depende del sistema de archivos. Si un sistema de archivos no admite la enumeración de secuencias, debe devolver STATUS_INVALID_PARAMETER o STATUS_NOT_IMPLEMENTED para estas solicitudes.

Si un sistema de archivos admite la enumeración de secuencias, pero el archivo no tiene secuencias distintas de la secuencia de datos predeterminada, que no tiene nombre, el sistema de archivos debe devolver una única estructura de FILE_STREAM_INFORMATION que contenga "::$DATA" o una cadena Unicode de longitud cero como la StreamName.

NTFS devuelve "::$DATA" como streamName para el flujo de datos predeterminado.

Para un flujo de datos con nombre, NTFS anexa ":$DATA" al nombre de la secuencia. Por ejemplo, para un flujo de datos de usuario con el nombre "Authors", NTFS devuelve ":Authors:$DATA" como streamName .

Al llamar a una rutina como ZwCreateFile para abrir una secuencia de archivos con nombre, se puede omitir la parte ":$DATA" del nombre. Por ejemplo, para abrir la secuencia "Authors" de un archivo denominado "Book", el autor de la llamada puede especificar "Book:Authors" o "Book:Authors:$DATA" como nombre de la secuencia. Ambos nombres son equivalentes.

El tamaño del búfer pasado en el parámetro FileInformation de a FltQueryInformationFile o ZwQueryInformationFile debe ser al menos tamaño de (FILE_STREAM_INFORMATION). Si este búfer no es lo suficientemente grande como para contener una estructura de FILE_STREAM_INFORMATION para cada secuencia de archivos, FltQueryInformationFile o ZwQueryInformationFile devuelve STATUS_BUFFER_OVERFLOW o STATUS_BUFFER_TOO_SMALL. Dado que una llamada incorrecta a FltQueryInformationFile o ZwQueryInformationFile no devuelve el tamaño de búfer necesario, los controladores de filtro deben realizar una o más llamadas adicionales a FltQueryInformationFile o ZwQueryInformationFile, pasando un búfer mayor en cada llamada, hasta que el búfer sea lo suficientemente grande.

La compatibilidad con flujos de datos con nombre es específica del sistema de archivos. Los controladores de filtro del sistema de archivos pueden determinar si un sistema de archivos admite secuencias con nombre de cualquiera de las maneras siguientes:

  • Llamando a FltQueryVolumeInformation o ZwQueryVolumeInformationFile y especificando FileFsAttributeInformation para el parámetro FsInformationClass de . A cambio, el búfer de FsInformation de contiene una estructura de FILE_FS_ATTRIBUTE_INFORMATION. Si el bit de FILE_NAMED_STREAMS se establece en el FileSystemAttributes miembro de esta estructura, el sistema de archivos admite secuencias con nombre.

  • Enviando una solicitud IRP_MJ_QUERY_VOLUME_INFORMATION al sistema de archivos y especificando FileFsAttributeInformation para el parámetro FsInformationClass. A cambio, Irp->AssociatedIrp.SystemBuffer contiene una estructura de FILE_FS_ATTRIBUTE_INFORMATION. Si el bit de FILE_NAMED_STREAMS se establece en el FileSystemAttributes miembro de esta estructura, el sistema de archivos admite secuencias con nombre.

La estructura FILE_STREAM_INFORMATION debe alinearse en un límite de LONGLONG (8 bytes). Si un búfer contiene dos o más de estas estructuras, el nextEntryOffset valor de cada entrada, excepto el último, cae en un límite de 8 bytes.

Requisitos

Requisito Valor
encabezado de ntifs.h (incluya Ntifs.h, Fltkernel.h)

Consulte también

fltQueryInformationFile de

FltQueryVolumeInformation

IRP_MJ_QUERY_INFORMATION

IRP_MJ_QUERY_VOLUME_INFORMATION

ZwCreateFile

ZwQueryInformationFile

ZwQueryVolumeInformationFile