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 a esta.

StreamNameLength

Longitud, en bytes, de la cadena StreamName .

StreamSize

Tamaño, en bytes, de la secuencia.

StreamAllocationSize

Tamaño de asignación de secuencia 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.

Comentarios

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

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

  • Mediante el envío de una solicitud IRP_MJ_QUERY_INFORMATION al sistema de archivos y la especificación de FileStreamInformation para el parámetro FileInformationClass . A cambio, Irp-AssociatedIrp.SystemBuffer> contiene una estructura 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 flujos depende del sistema de archivos. Si un sistema de archivos no admite la enumeración de flujos, 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 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 a FltQueryInformationFile o ZwQueryInformationFile debe ser al menos sizeof (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 . A cambio, el búfer FsInformation contiene una estructura FILE_FS_ATTRIBUTE_INFORMATION. Si el bit de FILE_NAMED_STREAMS se establece en el miembro FileSystemAttributes de esta estructura, el sistema de archivos admite secuencias con nombre.

  • Mediante el envío de una solicitud IRP_MJ_QUERY_VOLUME_INFORMATION al sistema de archivos y la especificación de FileFsAttributeInformation para el parámetro FsInformationClass . A cambio, Irp-AssociatedIrp.SystemBuffer> contiene una estructura FILE_FS_ATTRIBUTE_INFORMATION. Si el bit de FILE_NAMED_STREAMS se establece en el miembro FileSystemAttributes 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 valor NextEntryOffset de cada entrada, excepto el último, cae en un límite de 8 bytes.

Requisitos

Requisito Valor
Header ntifs.h (incluya Ntifs.h, Fltkernel.h)

Consulte también

FltQueryInformationFile

FltQueryVolumeInformation

IRP_MJ_QUERY_INFORMATION

IRP_MJ_QUERY_VOLUME_INFORMATION

ZwCreateFile

ZwQueryInformationFile

ZwQueryVolumeInformationFile