estructura de FSRTL_ADVANCED_FCB_HEADER (ntifs.h)

La estructura FSRTL_ADVANCED_FCB_HEADER contiene información de contexto que mantiene un sistema de archivos sobre un archivo.

Sintaxis

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;

Miembros

DUMMYSTRUCTNAME

Miembro sin nombre que contiene una estructura de tipo FSRTL_COMMON_FCB_HEADER.

FastMutex

Puntero a una exclusión mutua rápida inicializada que se usa para sincronizar el acceso a los siguientes miembros de DUMMYSTRUCTNAME:

  • AllocationSize
  • FileSize
  • ValidDataLength

Si está presente, el miembro PushLock se usa para sincronizar el acceso al miembro FilterContexts ; De lo contrario, se usa FastMutex .

FilterContexts

Puntero al encabezado de una lista de todas las estructuras de contexto asociadas al archivo. Los controladores de filtro pueden buscar en esta lista llamando a FsRtlLookupPerStreamContext y modifíquelo llamando a FsRtlInsertPerStreamContext y FsRtlRemovePerStreamContext.

PushLock

Bloqueo de inserción usado para sincronizar el acceso a la lista FilterContexts . Este campo solo está disponible a partir de Windows Vista (es decir, si el campo de bits Versión de la estructura de FSRTL_COMMON_FCB_HEADER es mayor o igual que FSRTL_FCB_HEADER_V1).

FileContextSupportPointer

Puntero a un campo de puntero usado por la biblioteca en tiempo de ejecución del sistema de archivos (FSRTL) para realizar un seguimiento de los contextos de archivo. Si no es NULL, este miembro debe ser un puntero a una variable PVOID dentro de una estructura por archivo para el sistema de archivos que creó la estructura. Si es NULL, no se admiten contextos de archivo. Este miembro solo está disponible a partir de Windows Vista (es decir, si el campo de bits Versión de la estructura FSRTL_COMMON_FCB_HEADER es mayor o igual que FSRTL_FCB_HEADER_V1).

Oplock

El interbloqueo del archivo o directorio. Este campo solo está disponible a partir de Windows 8 (es decir, si el campo de bits Versión de la estructura FSRTL_COMMON_FCB_HEADER es mayor o igual que FSRTL_FCB_HEADER_V2).

ReservedForRemote

Si el sistema de archivos es remoto, este campo está reservado. Solo está disponible a partir de Windows 8 (es decir, si el campo de bits Versión de la estructura FSRTL_COMMON_FCB_HEADER es mayor o igual que FSRTL_FCB_HEADER_V2).

AePushLock

Bloqueo de inserción de expansión automática que se usa en lugar de PushLock para sincronizar el acceso a la lista de contextos de secuencia. Consulte Comentarios para obtener más detalles.

AePushlock está disponible a partir de Windows 10, versión 20H2 (es decir, si el campo de bits Versión de la estructura de FSRTL_COMMON_FCB_HEADER es mayor o igual que FSRTL_FCB_HEADER_V3) y debe inicializarse llamando a FsRtlSetupAdvancedHeaderEx2.

ReservedContextLegacy

BypassIoOpenCount

Realiza un seguimiento de cuántos identificadores están abiertos actualmente con BypassIO habilitado en esta secuencia.

Este campo está disponible a partir de Windows 11 (es decir, si el campo de bits Versión de la estructura FSRTL_COMMON_FCB_HEADER es mayor o igual que FSRTL_FCB_HEADER_V4).

ReservedContext

Este campo está reservado para uso del sistema. Solo se usa en Windows 8.1 a través de Windows 10, versión 1803 (si el campo de bits Versión de la estructura de FSRTL_COMMON_FCB_HEADER es mayor o igual que FSRTL_FCB_HEADER_V3).

Comentarios

La estructura FSRTL_ADVANCED_FCB_HEADER es un superconjunto de la estructura FSRTL_COMMON_FCB_HEADER . Los sistemas de archivos (incluidos los controladores de filtro y minifiltro heredados, cuando corresponda) deben usar la estructura FSRTL_ADVANCED_FCB_HEADER .

Los sistemas de archivos deben usar una de las macros siguientes para inicializar la estructura de FSRTL_ADVANCED_FCB_HEADER :

Estas macros establecen las marcas siguientes.

Marca Significado
FSRTL_FLAG_ADVANCED_HEADER Esta marca se establece en el miembro Flags de la estructura FSRTL_COMMON_FCB_HEADER , esta marca indica la compatibilidad del controlador del sistema de archivos para las estructuras de FSRTL_ADVANCED_FCB_HEADER . Esta marca no debe modificarse.
FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS Esta marca se establece en el miembro Flags2 de FSRTL_COMMON_FCB_HEADER, esta marca indica la compatibilidad con los contextos del controlador de filtro. Esta marca solo se puede borrar para los archivos de paginación (vea la información después de la tabla).

Los sistemas de archivos deben establecer el miembro FsContext de cada objeto de archivo para que apunte a una estructura de FSRTL_ADVANCED_FCB_HEADER . Esta estructura se puede incrustar dentro de una estructura de objetos de contexto específica de una secuencia del sistema de archivos (el resto de la estructura es específica del sistema de archivos). Normalmente, esta estructura es un bloque de control de archivos (FCB). Sin embargo, en algunos sistemas de archivos que admiten varios flujos de datos, como NTFS, es un bloque de control de flujo (SCB). Tenga en cuenta que los FCB y los SCB para todas las clases de solicitudes abiertas, incluidas las solicitudes abiertas por volumen, deben incluir esta estructura.

Si el archivo es un archivo de paginación, la estructura FSRTL_ADVANCED_FCB_HEADER debe asignarse desde un grupo no paginado. De lo contrario, se puede asignar desde un grupo paginado o no paginado.

Todos los sistemas de archivos de Microsoft deshabilitan la compatibilidad con el contexto de secuencia para paginar archivos borrando la marca FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS en el miembro Flags2 de FSRTL_COMMON_FCB_HEADER después de llamar a FsRtlSetupAdvancedHeader. (Consulte la función FatCreateFcb en Strucsup.c para el ejemplo de WDK FASTFAT). Se recomienda encarecidamente que haga lo mismo en el sistema de archivos o sistemas para que el sistema operativo se comporte de forma coherente en todos los sistemas de archivos.

Bloqueos de inserción de expansión automática

Los bloqueos de inserción de expansión automática se introdujeron en Windows 10, versión 20H2. Cuando los bloqueos del Administrador de filtros se diseñaron originalmente, los grandes sistemas multiprocesador eran muy poco comunes y la RAM era preciosa. Con estos sistemas ahora comunes y RAM no tan limitados, los bloqueos de inserción de expansión automática proporcionan un equilibrio beneficioso entre el consumo de memoria y la velocidad.

Un bloqueo de inserción de expansión automática puede cambiar automáticamente de un bloqueo de inserción no compatible con caché normal en un bloqueo de inserción compatible con la memoria caché cuando detecta que está sujeto a una contención de caché alta debido a un gran número de adquiridores compartidos simultáneos. El bloqueo de inserción de expansión automática es mayor que un bloqueo de inserción normal cuando no se expande, pero no casi tan grande como un bloqueo de inserción compatible con la memoria caché. Este tipo de bloqueo de inserción es más eficaz en los sistemas multiprocesador.

Requisitos

Requisito Valor
Header ntifs.h (incluya Ntifs.h, Fltkernel.h)

Consulte también

FSRTL_COMMON_FCB_HEADER

FSRTL_PER_STREAM_CONTEXT

FsRtlInsertPerStreamContext

FsRtlLookupPerStreamContext

FsRtlRemovePerStreamContext

FsRtlSetupAdvancedHeader

FsRtlSetupAdvancedHeaderEx

FsRtlSetupAdvancedHeaderEx2

FsRtlTeardownPerStreamContexts