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
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
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
ReservedForRemote
Se il file system è remoto, questo campo è riservato. È disponibile solo a partire da Windows 8 ( ovvero, se il campo di bit versione
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
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
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:
- FsRtlSetupAdvancedHeader
- FsRtlSetupAdvancedHeaderEx
- FsRtlSetupAdvancedHeaderEx2, disponibile a partire da Windows 10 versione 20H2.
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
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
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) |