struttura FSRTL_ADVANCED_FCB_HEADER (ntifs.h)

La struttura FSRTL_ADVANCED_FCB_HEADER contiene informazioni di contesto che un file system gestisce su un file.

Sintassi

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;

Members

DUMMYSTRUCTNAME

Membro senza nome che contiene una struttura di tipo FSRTL_COMMON_FCB_HEADER.

FastMutex

Puntatore a un mutex rapido inizializzato utilizzato per sincronizzare l'accesso ai membri seguenti di DUMMYSTRUCTNAME:

  • AllocationSize
  • Dimensione
  • ValidDataLength

Se presente, il membro PushLock viene utilizzato per sincronizzare l'accesso al membro FilterContexts ; in caso contrario, viene usato FastMutex .

FilterContexts

Puntatore all'inizio di un elenco di tutte le strutture di contesto associate al file. I driver di filtro possono eseguire ricerche in questo elenco chiamando FsRtlLookupPerStreamContext e modificarli chiamando FsRtlInsertPerStreamContext e FsRtlRemovePerStreamContext.

PushLock

Blocco push utilizzato per sincronizzare l'accesso all'elenco FilterContexts . Questo campo è disponibile solo a partire da Windows Vista, ovvero se il campo bit versione della struttura FSRTL_COMMON_FCB_HEADER è maggiore o uguale a FSRTL_FCB_HEADER_V1.

FileContextSupportPointer

Puntatore a un campo puntatore usato dalla libreria di runtime del file system (FSRTL) per tenere traccia dei contesti di file. Se non è NULL, questo membro deve essere un puntatore a una variabile PVOID all'interno di una struttura per file per il file system che ha creato la struttura. Se NULL, i contesti di file non sono supportati. Questo membro è disponibile solo a partire da Windows Vista, ovvero se il campo Bit versione della struttura FSRTL_COMMON_FCB_HEADER è maggiore o uguale a FSRTL_FCB_HEADER_V1.

Oplock

L'oplock per il file o la directory. Questo campo è disponibile solo a partire da Windows 8 , ovvero se il campo bit version della struttura FSRTL_COMMON_FCB_HEADER è maggiore o uguale a FSRTL_FCB_HEADER_V2.

ReservedForRemote

Se il file system è remoto, questo campo è riservato. È disponibile solo a partire da Windows 8 , ovvero se il campo bit version della struttura FSRTL_COMMON_FCB_HEADER è maggiore o uguale a FSRTL_FCB_HEADER_V2.

AePushLock

Blocco push di espansione automatica usato anziché PushLock per sincronizzare l'accesso all'elenco di contesti di flusso. Per informazioni dettagliate, vedere la sezione Note .

AePushlock è disponibile a partire da Windows 10 versione 20H2 ,ovvero se il campo bit version della struttura FSRTL_COMMON_FCB_HEADER è maggiore o uguale a FSRTL_FCB_HEADER_V3) e deve essere inizializzato chiamando FsRtlSetupAdvancedHeaderEx2.

ReservedContextLegacy

BypassIoOpenCount

Tiene traccia del numero di handle attualmente aperti con BypassIO abilitato in questo flusso.

Questo campo è disponibile a partire da Windows 11 ( ovvero se il campo bit version della struttura FSRTL_COMMON_FCB_HEADER è maggiore o uguale a FSRTL_FCB_HEADER_V4).

ReservedContext

Questo campo è riservato per l'uso del sistema. Viene usato solo in Windows 8.1 tramite Windows 10 versione 1803 (se il campo bit version della struttura FSRTL_COMMON_FCB_HEADER è maggiore o uguale a FSRTL_FCB_HEADER_V3).

Commenti

La struttura FSRTL_ADVANCED_FCB_HEADER è un superset della struttura FSRTL_COMMON_FCB_HEADER . I file system (inclusi i driver di filtro e minifiltro legacy, se applicabile) devono usare la struttura FSRTL_ADVANCED_FCB_HEADER .

I file system devono utilizzare una delle macro seguenti per inizializzare la struttura FSRTL_ADVANCED_FCB_HEADER :

I flag seguenti vengono impostati da queste macro.

Contrassegno Significato
FSRTL_FLAG_ADVANCED_HEADER Impostato nel membro Flags della struttura FSRTL_COMMON_FCB_HEADER , questo flag indica il supporto del driver del file system per le strutture di FSRTL_ADVANCED_FCB_HEADER . Questo flag non deve essere modificato.
FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS Impostato nel membro Flags2 di FSRTL_COMMON_FCB_HEADER, questo flag indica il supporto per i contesti del driver di filtro. Questo flag può essere cancellato solo per i file di paging (vedere le informazioni dopo la tabella).

I file system devono impostare il membro FsContext di ogni oggetto file in modo che punti a una struttura FSRTL_ADVANCED_FCB_HEADER . Questa struttura può essere incorporata all'interno di una struttura di oggetti di contesto specifica per un flusso del file system (il resto della struttura è specifico del file system). In genere, questa struttura è un blocco di controllo file (FCB). Tuttavia, in alcuni file system che supportano più flussi di dati, ad esempio NTFS, si tratta di un blocco di controllo di flusso (SCB). Si noti che i cluster di failover e gli SBS per tutte le classi di richieste aperte, incluse le richieste di apertura del volume, devono includere questa struttura.

Se il file è un file di paging, la struttura FSRTL_ADVANCED_FCB_HEADER deve essere allocata da un pool non di paging. In caso contrario, può essere allocata da un pool di paging o non di paging.

Tutti i file system Microsoft disabilitano il supporto del contesto di flusso per il paging dei file cancellando il flag FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS nel membro Flags2 di FSRTL_COMMON_FCB_HEADER dopo aver chiamato FsRtlSetupAdvancedHeader. Per l'esempio FASTFAT WDK, vedere la funzione FatCreateFcb in Strucsup.c . Si consiglia vivamente di eseguire la stessa operazione nel file system o nei sistemi in modo che il sistema operativo si comporti in modo coerente in tutti i file system.

Blocchi push di espansione automatica

I blocchi push con espansione automatica sono stati introdotti in Windows 10 versione 20H2. Quando i blocchi di Filter Manager sono stati originariamente progettati, i sistemi multiprocessore di grandi dimensioni erano molto insoliti e la RAM era preziosa. Con questi sistemi ora comuni e ram non come limitati, i blocchi push di espansione automatica offrono un compromesso vantaggioso tra consumo di memoria e velocità.

Un blocco push con espansione automatica può cambiare automaticamente da un normale blocco push non compatibile con la cache in un blocco push compatibile con la cache quando rileva che è soggetto a conflitti di cache elevati a causa di un numero elevato di acquisizioni condivise simultanee. Il blocco push con espansione automatica è maggiore di un normale blocco push quando non è espanso, ma non è quasi grande come un blocco push compatibile con la cache. Questo tipo di blocco push è più efficiente nei sistemi multiprocessore.

Requisiti

Requisito Valore
Intestazione ntifs.h (include Ntifs.h, Fltkernel.h)

Vedi anche

FSRTL_COMMON_FCB_HEADER

FSRTL_PER_STREAM_CONTEXT

FsRtlInsertPerStreamContext

FsRtlLookupPerStreamContext

FsRtlRemovePerStreamContext

FsRtlSetupAdvancedHeader

FsRtlSetupAdvancedHeaderEx

FsRtlSetupAdvancedHeaderEx2

FsRtlTeardownPerStreamContexts