Compartilhar via


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.

Observações

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 arquivos.

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

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 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 "Autores" 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 tamanho de (FILE_STREAM_INFORMATION). Se esse buffer não for grande o suficiente para manter uma estrutura de 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 FileSystemAttributes membro 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, >>AssociatedIrp.SystemBuffer contém uma estrutura FILE_FS_ATTRIBUTE_INFORMATION. Se o bit FILE_NAMED_STREAMS for definido no FileSystemAttributes membro dessa estrutura, o sistema de arquivos oferecerá suporte a fluxos nomeados.

A estrutura de FILE_STREAM_INFORMATION deve ser alinhada em um limite LONGLONG (8 bytes). Se um buffer contiver duas ou mais dessas estruturas, o nextEntryOffset valor 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)

Consulte também

FltQueryInformationFile

FltQueryVolumeInformation

IRP_MJ_QUERY_INFORMATION

IRP_MJ_QUERY_VOLUME_INFORMATION

ZwCreateFile

ZwQueryInformationFile

ZwQueryVolumeInformationFile