Condividi tramite


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;

Membri

DUMMYSTRUCTNAME

Membro senza nome che contiene una struttura di tipo FSRTL_COMMON_FCB_HEADER.

FastMutex

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

  • AllocationSize
  • FileSize
  • ValidDataLength

Se presente, il membro PushLock viene usato 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 usato per sincronizzare l'accesso all'elenco FilterContexts . Questo campo è disponibile solo a partire da Windows Vista, ovvero se il campo versione della struttura di 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 di bit Versione della struttura di 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 di bit versione della struttura di 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 di bit versione della struttura di FSRTL_COMMON_FCB_HEADER è maggiore o uguale a FSRTL_FCB_HEADER_V2).

AePushLock

Blocco push con espansione automatica usato invece di PushLock per sincronizzare l'accesso all'elenco di contesti di flusso. Per informazioni dettagliate, vedere osservazioni .

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

ReservedContextLegacy

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

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 di bit versione della struttura di FSRTL_COMMON_FCB_HEADER è maggiore o uguale a FSRTL_FCB_HEADER_V4).

ReservedContext

Riservato per l'uso del sistema.

Questo campo è disponibile a partire da Windows 11 versione 22H2, ovvero se il campo versione campo bit della struttura di FSRTL_COMMON_FCB_HEADER è maggiore o uguale a FSRTL_FCB_HEADER_V5).

Osservazioni

La struttura FSRTL_ADVANCED_FCB_HEADER è un superset della struttura FSRTL_COMMON_FCB_HEADER. I file system (inclusi i driver di filtro legacy e minifiltro, 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.

Bandiera Significato
FSRTL_FLAG_ADVANCED_HEADER Impostato nel Flag membro della struttura FSRTL_COMMON_FCB_HEADER, questo flag indica il supporto del driver del file system per le strutture 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 di 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 le librerie di database 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. Vedere la funzione FatCreateFcb in Strucsup.c per l'esempio FASTFAT WDK. 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.

Espandi automaticamente i blocchi push

I blocchi push con espansione automatica sono stati introdotti in Windows 10 versione 20H2. Quando i blocchi di Filter Manager erano originariamente progettati, i sistemi multiprocessore di grandi dimensioni erano molto insoliti e la RAM era preziosa. Con questi sistemi ora comuni e RAM non 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 viene espanso, ma non quasi tanto grande quanto un blocco push compatibile con la cache. Questo tipo di blocco push è più efficiente nei sistemi multiprocessore.

Fabbisogno

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

Vedere anche

FSRTL_COMMON_FCB_HEADER

FSRTL_PER_STREAM_CONTEXT

FsRtlInsertPerStreamContext

FsRtlLookupPerStreamContext

FsRtlRemovePerStreamContext

FsRtlSetupAdvancedHeader

FsRtlSetupAdvancedHeaderEx

FsRtlSetupAdvancedHeaderEx2

FsRtlTeardownPerStreamContexts