Condividi tramite


FSRTL_ADVANCED_FCB_HEADER struttura (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 usato per sincronizzare l'accesso ai membri seguenti di DUMMYSTRUCTNAME:

  • AllocationSize
  • Dimensione
  • ValidDataLength

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

FilterContexts

Puntatore alla testa di un elenco di tutte le strutture di contesto associate al file. I driver di filtro possono cercare 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 di bit 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 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 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 Di tipo Versiondella 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-versiondella struttura FSRTL_COMMON_FCB_HEADER è maggiore o uguale a FSRTL_FCB_HEADER_V2.

AePushLock

Blocco push con espansione automatica usato anziché 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 Bit versionedella struttura 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 tramite Windows 10, versione 1803 (se il campo Versionedella struttura 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 Versionedella struttura FSRTL_COMMON_FCB_HEADER è maggiore o uguale a FSRTL_FCB_HEADER_V4.

ReservedContext

Riservato per l'utilizzo nel sistema.

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

Commenti

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

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

I flag seguenti vengono impostati da queste macro.

Contrassegno Significato
FSRTL_FLAG_ADVANCED_HEADER Impostare nel membro Flag 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 Impostare 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 per puntare 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 di file system (la parte restante della struttura è specifica 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, è un blocco di controllo di flusso (SCB). Si noti che gli FCB e gli SBS per tutte le classi di richieste aperte, incluse le richieste aperte 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 con pagine. In caso contrario, può essere allocata da un pool di pagine o non a pagina.

Tutti i file system Microsoft disabilitano il supporto del contesto di flusso per il paging dei file cancellando il flag di 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 WDK FASTFAT. Si consiglia vivamente di eseguire le stesse operazioni nel file system o nei sistemi in modo che il sistema operativo si comporta in modo coerente in tutti i file system.

Blocchi push di espansione automatica

I blocchi push di 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 tali sistemi ora comuni e RAM non come limitati, i blocchi push di espansione automatica offrono un compromesso vantaggioso tra l'utilizzo della memoria e la velocità.

Un blocco push con espansione automatica può cambiare automaticamente da un blocco push non compatibile con la cache in un blocco push con riconoscimento della cache quando rileva che è soggetto a contesa elevata della cache 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 come un blocco push con riconoscimento della 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