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 :
- FsRtlSetupAdvancedHeader
- FsRtlSetupAdvancedHeaderEx
- FsRtlSetupAdvancedHeaderEx2, disponibile a partire da Windows 10 versione 20H2.
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) |