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 :
- 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 | 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
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per