estrutura FILE_STREAM_INFORMATION (ntifs.h)

A estrutura FILE_STREAM_INFORMATION é usada para enumerar os fluxos de um arquivo.

Sintaxe

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

Membros

NextEntryOffset

O deslocamento da próxima entrada de FILE_STREAM_INFORMATION. Esse membro será zero se nenhuma outra entrada seguir esta.

StreamNameLength

Comprimento, em bytes, da cadeia de caracteres StreamName .

StreamSize

Tamanho, em bytes, do fluxo.

StreamAllocationSize

Tamanho da alocação do fluxo de arquivos, em bytes. Normalmente, esse valor é um múltiplo do setor ou do tamanho do cluster do dispositivo físico subjacente.

StreamName[1]

Cadeia de caracteres Unicode que contém o nome do fluxo.

Comentários

A estrutura FILE_STREAM_INFORMATION é usada para enumerar os fluxos de um arquivo. Essa operação pode ser executada de qualquer uma das seguintes maneiras:

  • Chamando FltQueryInformationFile ou ZwQueryInformationFile e especificando FileStreamInformation para o parâmetro FileInformationClass . No retorno, o buffer FileInformation contém uma estrutura FILE_STREAM_INFORMATION para cada fluxo de arquivo.

  • Enviando uma solicitação IRP_MJ_QUERY_INFORMATION para o sistema de arquivos e especificando FileStreamInformation para o parâmetro FileInformationClass . No retorno, Irp-AssociatedIrp.SystemBuffer> contém uma estrutura FILE_STREAM_INFORMATION para cada fluxo de arquivo.

Nenhum direito de acesso específico é necessário para consultar essas informações. Portanto, essas informações estão disponíveis desde que o arquivo esteja aberto.

O suporte para enumeração de fluxo depende do sistema de arquivos. Se um sistema de arquivos não der suporte à enumeração de fluxo, ele deverá retornar STATUS_INVALID_PARAMETER ou STATUS_NOT_IMPLEMENTED para essas solicitações.

Se um sistema de arquivos der suporte à enumeração de fluxo, mas o arquivo não tiver fluxos diferentes do fluxo de dados padrão, que não tem nome, o sistema de arquivos deverá retornar uma única estrutura de FILE_STREAM_INFORMATION contendo "::$DATA" ou uma cadeia de caracteres Unicode de comprimento zero como o StreamName.

O NTFS retorna "::$DATA" como o StreamName para o fluxo de dados padrão.

Para um fluxo de dados nomeado, o NTFS acrescenta ":$DATA" ao nome do fluxo. Por exemplo, para um fluxo de dados do usuário com o nome "Authors", o NTFS retorna ":Authors:$DATA" como o StreamName.

Ao chamar uma rotina como ZwCreateFile para abrir um fluxo de arquivo nomeado, a parte ":$DATA" do nome pode ser omitida. Por exemplo, para abrir o fluxo "Authors" de um arquivo chamado "Book", o chamador pode especificar "Book:Authors" ou "Book:Authors:$DATA" como o nome do fluxo. Ambos os nomes são equivalentes.

O tamanho do buffer passado no parâmetro FileInformation para FltQueryInformationFile ou ZwQueryInformationFile deve ser pelo menos sizeof (FILE_STREAM_INFORMATION). Se esse buffer não for grande o suficiente para manter uma estrutura FILE_STREAM_INFORMATION para cada fluxo de arquivos, FltQueryInformationFile ou ZwQueryInformationFile retornará STATUS_BUFFER_OVERFLOW ou STATUS_BUFFER_TOO_SMALL. Como essa chamada malsucedida para FltQueryInformationFile ou ZwQueryInformationFile não retorna o tamanho do buffer necessário, os drivers de filtro devem fazer uma ou mais chamadas adicionais para FltQueryInformationFile ou ZwQueryInformationFile, passando um buffer maior em cada chamada, até que o buffer seja grande o suficiente.

O suporte para fluxos de dados nomeados é específico do sistema de arquivos. Os drivers de filtro do sistema de arquivos podem determinar se um sistema de arquivos dá suporte a fluxos nomeados de qualquer uma das seguintes maneiras:

  • Chamando FltQueryVolumeInformation ou ZwQueryVolumeInformationFile e especificando FileFsAttributeInformation para o parâmetro FsInformationClass . No retorno, o buffer FsInformation contém uma estrutura de FILE_FS_ATTRIBUTE_INFORMATION. Se o bit FILE_NAMED_STREAMS for definido no membro FileSystemAttributes dessa estrutura, o sistema de arquivos oferecerá suporte a fluxos nomeados.

  • Enviando uma solicitação IRP_MJ_QUERY_VOLUME_INFORMATION para o sistema de arquivos e especificando FileFsAttributeInformation para o parâmetro FsInformationClass . No retorno, Irp-AssociatedIrp.SystemBuffer> contém uma estrutura FILE_FS_ATTRIBUTE_INFORMATION. Se o bit FILE_NAMED_STREAMS for definido no membro FileSystemAttributes dessa estrutura, o sistema de arquivos oferecerá suporte a fluxos nomeados.

A estrutura FILE_STREAM_INFORMATION deve ser alinhada em um limite LONGLONG (8 bytes). Se um buffer contiver duas ou mais dessas estruturas, o valor NextEntryOffset em cada entrada, exceto o último, cairá em um limite de 8 bytes.

Requisitos

Requisito Valor
Cabeçalho ntifs.h (inclua Ntifs.h, Fltkernel.h)

Confira também

FltQueryInformationFile

FltQueryVolumeInformation

IRP_MJ_QUERY_INFORMATION

IRP_MJ_QUERY_VOLUME_INFORMATION

ZwCreateFile

ZwQueryInformationFile

ZwQueryVolumeInformationFile