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
ouFltQueryInformationFile ZwQueryInformationFile e especificando FileStreamInformation para o parâmetroFileInformationClass. 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
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
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
ouFltQueryVolumeInformation ZwQueryVolumeInformationFile e especificando FileFsAttributeInformation para o parâmetroFsInformationClass. 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
IRP_MJ_QUERY_VOLUME_INFORMATION