Compartilhar via


estrutura FSRTL_ADVANCED_FCB_HEADER (ntifs.h)

A estrutura FSRTL_ADVANCED_FCB_HEADER contém informações de contexto que um sistema de arquivos mantém sobre um arquivo.

Sintaxe

typedef struct _FSRTL_ADVANCED_FCB_HEADER {
  FSRTL_COMMON_FCB_HEADER          DUMMYSTRUCTNAME;
  PFAST_MUTEX                      FastMutex;
  LIST_ENTRY                       FilterContexts;
  EX_PUSH_LOCK                     PushLock;
  PVOID                            *FileContextSupportPointer;
  union {
    OPLOCK Oplock;
    PVOID  ReservedForRemote;
  };
  PVOID                            AePushLock;
  PVOID                            ReservedContextLegacy;
  ULONG                            BypassIoOpenCount;
  struct _FSRTL_PER_STREAM_CONTEXT *ReservedContext;
} FSRTL_ADVANCED_FCB_HEADER;

Membros

DUMMYSTRUCTNAME

Um membro sem nome que contém uma estrutura do tipo FSRTL_COMMON_FCB_HEADER.

FastMutex

Um ponteiro para um mutex rápido inicializado que é usado para sincronizar o acesso aos seguintes membros do DUMMYSTRUCTNAME:

  • AllocationSize
  • FileSize
  • ValidDataLength

Se estiver presente, o membro PushLock será usado para sincronizar o acesso ao membro FilterContexts; caso contrário, FastMutex é usado.

FilterContexts

Um ponteiro para o cabeçalho de uma lista de todas as estruturas de contexto associadas ao arquivo. Os drivers de filtro podem pesquisar essa lista chamando FsRtlLookupPerStreamContex t e modificá-la chamando FsRtlInsertPerStreamContext e FsRtlRemovePerStreamContext.

PushLock

Um bloqueio por push usado para sincronizar o acesso à lista FilterContexts. Esse campo só estará disponível a partir do Windows Vista (ou seja, se a versão campo de bits da estrutura FSRTL_COMMON_FCB_HEADER for maior ou igual a FSRTL_FCB_HEADER_V1).

FileContextSupportPointer

Um ponteiro para um campo de ponteiro usado pela FSRTL (biblioteca de runtime do sistema de arquivos) para acompanhar contextos de arquivo. Se não NULL, esse membro deverá ser um ponteiro para uma variável PVOID dentro de uma estrutura por arquivo para o sistema de arquivos que criou a estrutura. Se NULL, não há suporte para contextos de arquivo. Esse membro só estará disponível a partir do Windows Vista (ou seja, se a versão campo de bits da estrutura FSRTL_COMMON_FCB_HEADER for maior ou igual a FSRTL_FCB_HEADER_V1).

Oplock

O oplock para o arquivo ou diretório. Esse campo só estará disponível a partir do Windows 8 (ou seja, se a versão campo de bits da estrutura FSRTL_COMMON_FCB_HEADER for maior ou igual a FSRTL_FCB_HEADER_V2).

ReservedForRemote

Se o sistema de arquivos for remoto, esse campo será reservado. Ele só estará disponível a partir do Windows 8 (ou seja, se a versão campo de bits da estrutura FSRTL_COMMON_FCB_HEADER for maior ou igual a FSRTL_FCB_HEADER_V2).

AePushLock

Um bloqueio de push de expansão automática que é usado em vez de PushLock para sincronizar o acesso à lista de contextos de fluxo. Consulte Comentários para obter detalhes.

do AePushlock está disponível a partir do Windows 10, versão 20H2 (ou seja, se a versão campo de bits da estrutura FSRTL_COMMON_FCB_HEADER for maior ou igual a FSRTL_FCB_HEADER_V3), e deverá ser inicializada chamando FsRtlSetupAdvancedHeaderEx2 .

ReservedContextLegacy

Esse campo é reservado para uso do sistema. Ele só será usado no Windows 8.1 até o Windows 10, versão 1803 (se a versão campo de bits da estrutura FSRTL_COMMON_FCB_HEADER for maior ou igual a FSRTL_FCB_HEADER_V3).

BypassIoOpenCount

Controla quantos identificadores estão abertos no momento com BypassIO habilitados neste fluxo.

Esse campo está disponível a partir do Windows 11 (ou seja, se a versão campo de bits da estrutura FSRTL_COMMON_FCB_HEADER for maior ou igual a FSRTL_FCB_HEADER_V4).

ReservedContext

Reservado para uso do sistema.

Esse campo está disponível a partir do Windows 11, versão 22H2 (ou seja, se a versão campo de bits da estrutura FSRTL_COMMON_FCB_HEADER for maior ou igual a FSRTL_FCB_HEADER_V5).

Observações

A estrutura FSRTL_ADVANCED_FCB_HEADER é um superconjunto da estrutura FSRTL_COMMON_FCB_HEADER. Os sistemas de arquivos (incluindo drivers de filtro herdado e minifiltro, quando aplicável) devem usar a estrutura FSRTL_ADVANCED_FCB_HEADER.

Os sistemas de arquivos devem usar uma das seguintes macros para inicializar a estrutura de FSRTL_ADVANCED_FCB_HEADER:

  • FsRtlSetupAdvancedHeader
  • FsRtlSetupAdvancedHeaderEx
  • FsRtlSetupAdvancedHeaderEx2, disponível a partir do Windows 10, versão 20H2.

Os sinalizadores a seguir são definidos por essas macros.

Bandeira Significado
FSRTL_FLAG_ADVANCED_HEADER Definido no Flags membro da estrutura FSRTL_COMMON_FCB_HEADER, esse sinalizador indica o suporte do driver do sistema de arquivos para estruturas de FSRTL_ADVANCED_FCB_HEADER. Esse sinalizador não deve ser modificado.
FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS Definido no Flags2 membro do FSRTL_COMMON_FCB_HEADER, esse sinalizador indica suporte para contextos de driver de filtro. Esse sinalizador só pode ser limpo para arquivos de paginação (consulte as informações após a tabela).

Os sistemas de arquivos devem definir o FsContext membro de cada objeto de arquivo para apontar para uma estrutura de FSRTL_ADVANCED_FCB_HEADER. Essa estrutura pode ser inserida dentro de uma estrutura de objeto de contexto específica a um fluxo do sistema de arquivos (o restante da estrutura é específico do sistema de arquivos). Normalmente, essa estrutura é um FCB (bloco de controle de arquivo). No entanto, em alguns sistemas de arquivos que dão suporte a vários fluxos de dados, como o NTFS, é um SCB (bloco de controle de fluxo). Observe que FCBs e SCBs para todas as classes de solicitações abertas, incluindo solicitações abertas por volume, devem incluir essa estrutura.

Se o arquivo for um arquivo de paginação, a estrutura de FSRTL_ADVANCED_FCB_HEADER deverá ser alocada de um pool nãopagado. Caso contrário, ele poderá ser alocado de um pool de páginas ou nãopagados.

Todos os sistemas de arquivos da Microsoft desabilitam o suporte de contexto de fluxo para arquivos de paginação limpando o sinalizador FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS no do Flags2 do FSRTL_COMMON_FCB_HEADER depois que eles chamam FsRtlSetupAdvancedHeader. (Consulte a função FatCreateFcb no Strucsup.c para a amostra do WDK FASTFAT.) Você é altamente incentivado a fazer o mesmo em seu sistema de arquivos ou sistemas para que o sistema operacional se comporte de maneira consistente em todos os sistemas de arquivos.

Expandir bloqueios de push automaticamente

Os bloqueios de push de expansão automática foram introduzidos no Windows 10, versão 20H2. Quando os bloqueios do Gerenciador de Filtros foram originalmente projetados, grandes sistemas multiprocessador eram muito incomuns e a RAM era preciosa. Com esses sistemas agora comuns e a RAM não tão limitada, os bloqueios de push de expansão automática fornecem uma compensação benéfica entre o consumo de memória e a velocidade.

Um bloqueio de push de expansão automática pode ser alterado automaticamente de um bloqueio de push regular sem reconhecimento de cache para um bloqueio de push com reconhecimento de cache quando detecta que ele está sujeito a uma alta contenção de cache devido a um grande número de adquirentes compartilhados simultâneos. O bloqueio de push de expansão automática é maior do que um bloqueio de push normal quando não expandido, mas não tão grande quanto um bloqueio de push com reconhecimento de cache. Esse tipo de bloqueio por push é mais eficaz em sistemas multiprocessadores.

Requisitos

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

Consulte também

FSRTL_COMMON_FCB_HEADER

FSRTL_PER_STREAM_CONTEXT

FsRtlInsertPerStreamContext

FsRtlLookupPerStreamContext

FsRtlRemovePerStreamContext

FsRtlSetupAdvancedHeader

FsRtlSetupAdvancedHeaderEx

FsRtlSetupAdvancedHeaderEx2

FsRtlTeardownPerStreamContexts