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) |