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 FsRtlLookupPerStreamContext 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 o campo bit Versão 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 for 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 for NULL, não há suporte para contextos de arquivo. Esse membro só estará disponível a partir do Windows Vista (ou seja, se o campo bit Versão 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 começando com Windows 8 (ou seja, se o campo de bits Versão 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 começando com Windows 8 (ou seja, se o campo de bits Versão 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.

O AePushlock está disponível começando com Windows 10, versão 20H2 (ou seja, se o campo de bits Versão da estrutura FSRTL_COMMON_FCB_HEADER for maior ou igual a FSRTL_FCB_HEADER_V3) e deverá ser inicializado chamando FsRtlSetupAdvancedHeaderEx2.

ReservedContextLegacy

BypassIoOpenCount

Rastreia quantos identificadores estão abertos no momento com o BypassIO habilitado neste fluxo.

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

ReservedContext

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

Comentários

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 FSRTL_ADVANCED_FCB_HEADER :

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

Sinalizador Significado
FSRTL_FLAG_ADVANCED_HEADER Definido no membro Flags 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 membro Flags2 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 membro FsContext de cada objeto de arquivo para apontar para uma estrutura FSRTL_ADVANCED_FCB_HEADER . Essa estrutura pode ser inserida dentro de uma estrutura de objeto de contexto específica de 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 arquivos). 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 pode ser alocado de um pool paginado ou nãopagado.

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 membro Flags2 do FSRTL_COMMON_FCB_HEADER depois que eles chamam FsRtlSetupAdvancedHeader. (Consulte a função FatCreateFcb em Strucsup.c para obter o exemplo do WDK do 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 automaticamente os bloqueios de push

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

Confira também

FSRTL_COMMON_FCB_HEADER

FSRTL_PER_STREAM_CONTEXT

FsRtlInsertPerStreamContext

FsRtlLookupPerStreamContext

FsRtlRemovePerStreamContext

FsRtlSetupAdvancedHeader

FsRtlSetupAdvancedHeaderEx

FsRtlSetupAdvancedHeaderEx2

FsRtlTeardownPerStreamContexts