FSRTL_ADVANCED_FCB_HEADER-Struktur (ntifs.h)
Die FSRTL_ADVANCED_FCB_HEADER-Struktur enthält Kontextinformationen, die ein Dateisystem zu einer Datei verwaltet.
Syntax
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;
Member
DUMMYSTRUCTNAME
Ein nicht benanntes Element, das eine Struktur vom Typ FSRTL_COMMON_FCB_HEADER enthält.
FastMutex
Ein Zeiger auf einen initialisierten schnellen Mutex, der zum Synchronisieren des Zugriffs auf die folgenden Member von DUMMYSTRUCTNAME verwendet wird:
- AllocationSize
- FileSize
- ValidDataLength
Falls vorhanden, wird das PushLock-Element verwendet, um den Zugriff auf das FilterContexts-Element zu synchronisieren. andernfalls wird FastMutex verwendet.
FilterContexts
Ein Zeiger auf den Kopf einer Liste aller Kontextstrukturen, die der Datei zugeordnet sind. Filtertreiber können diese Liste durchsuchen, indem Sie FsRtlLookupPerStreamContext aufrufen und sie ändern, indem Sie FsRtlInsertPerStreamContext und FsRtlRemovePerStreamContext aufrufen.
PushLock
Eine Pushsperre, die zum Synchronisieren des Zugriffs auf die FilterContexts-Liste verwendet wird. Dieses Feld ist nur ab Windows Vista verfügbar (das heißt, wenn das Bitfeld Version der FSRTL_COMMON_FCB_HEADER-Struktur größer oder gleich FSRTL_FCB_HEADER_V1 ist).
FileContextSupportPointer
Ein Zeiger auf ein Zeigerfeld, das von der Dateisystemlaufzeitbibliothek (FSRTL) zum Nachverfolgen von Dateikontexten verwendet wird. Wenn nicht NULL, muss dieser Member ein Zeiger auf eine PVOID-Variable innerhalb einer Dateistruktur für das Dateisystem sein, das die Struktur erstellt hat. Bei NULL werden Dateikontexte nicht unterstützt. Dieses Element ist nur ab Windows Vista verfügbar (d.a. wenn das Bitfeld Version der FSRTL_COMMON_FCB_HEADER-Struktur größer oder gleich FSRTL_FCB_HEADER_V1 ist).
Oplock
Der Oplock für die Datei oder das Verzeichnis. Dieses Feld ist nur ab Windows 8 verfügbar (d. a. wenn das Bitfeld Version der FSRTL_COMMON_FCB_HEADER-Struktur größer oder gleich FSRTL_FCB_HEADER_V2 ist).
ReservedForRemote
Wenn das Dateisystem remote ist, ist dieses Feld reserviert. Es ist nur ab Windows 8 verfügbar (d. a. wenn das Bitfeld Version der FSRTL_COMMON_FCB_HEADER-Struktur größer oder gleich FSRTL_FCB_HEADER_V2 ist).
AePushLock
Eine Pushsperre mit automatischer Erweiterung, die anstelle von PushLock verwendet wird, um den Zugriff auf die Liste der Streamkontexte zu synchronisieren. Weitere Informationen finden Sie im Abschnitt Hinweise.
AePushlock ist ab Windows 10 Version 20H2 verfügbar (d. h. wenn das Bitfeld Version der FSRTL_COMMON_FCB_HEADER-Struktur größer oder gleich FSRTL_FCB_HEADER_V3 ist), und muss durch Aufrufen von FsRtlSetupAdvancedHeaderEx2 initialisiert werden.
ReservedContextLegacy
Dieses Feld ist für die Systemverwendung reserviert. Es wird nur in Windows 8.1 bis Windows 10 Version 1803 verwendet (wenn das Bitfeld Version der FSRTL_COMMON_FCB_HEADER-Struktur größer oder gleich FSRTL_FCB_HEADER_V3 ist).
BypassIoOpenCount
Verfolgt, wie viele Handles derzeit geöffnet sind, wenn BypassIO für diesen Stream aktiviert ist.
Dieses Feld ist ab Windows 11 verfügbar (das heißt, wenn das Bitfeld Version der FSRTL_COMMON_FCB_HEADER-Struktur größer oder gleich FSRTL_FCB_HEADER_V4 ist).
ReservedContext
Ist für das System reserviert.
Dieses Feld ist ab Windows 11 Version 22H2 verfügbar (d. a. wenn das Bitfeld Version der FSRTL_COMMON_FCB_HEADER-Struktur größer oder gleich FSRTL_FCB_HEADER_V5 ist).
Hinweise
Die FSRTL_ADVANCED_FCB_HEADER-Struktur ist eine Übermenge der FSRTL_COMMON_FCB_HEADER-Struktur . Dateisysteme (einschließlich Legacyfilter- und Minifiltertreibern, falls zutreffend) müssen die FSRTL_ADVANCED_FCB_HEADER-Struktur verwenden.
Dateisysteme müssen eines der folgenden Makros verwenden, um die FSRTL_ADVANCED_FCB_HEADER-Struktur zu initialisieren:
- FsRtlSetupAdvancedHeader
- FsRtlSetupAdvancedHeaderEx
- FsRtlSetupAdvancedHeaderEx2, verfügbar ab Windows 10, Version 20H2.
Die folgenden Flags werden von diesen Makros festgelegt.
Flag | Bedeutung |
---|---|
FSRTL_FLAG_ADVANCED_HEADER | Im Flags-Element der FSRTL_COMMON_FCB_HEADER-Struktur festgelegt, gibt dieses Flag die Unterstützung des Dateisystemtreibers für FSRTL_ADVANCED_FCB_HEADER-Strukturen an. Dieses Flag sollte nicht geändert werden. |
FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS | Im Flags2-Member von FSRTL_COMMON_FCB_HEADER festgelegt, gibt dieses Flag die Unterstützung für Filtertreiberkontexte an. Dieses Flag kann nur für Auslagerungsdateien gelöscht werden (siehe Informationen nach der Tabelle). |
Dateisysteme müssen festlegen, dass das FsContext-Element jedes Dateiobjekts auf eine FSRTL_ADVANCED_FCB_HEADER-Struktur verweist. Diese Struktur kann in eine Kontextobjektstruktur eingebettet werden, die für einen Dateisystemdatenstrom spezifisch ist (der Rest der Struktur ist dateisystemspezifisch). In der Regel handelt es sich bei dieser Struktur um einen Dateisteuerungsblock (FCB). Bei einigen Dateisystemen, die mehrere Datenströme unterstützen, z. B. NTFS, handelt es sich jedoch um einen Streamsteuerungsblock (Stream Control Block, SCB). Beachten Sie, dass FCBs und SCBs für alle Klassen von offenen Anforderungen, einschließlich volume open requests, diese Struktur enthalten müssen.
Wenn es sich bei der Datei um eine Auslagerungsdatei handelt, muss die FSRTL_ADVANCED_FCB_HEADER-Struktur aus einem nicht auslagerungsfreien Pool zugeordnet werden. Andernfalls kann sie aus einem ausgelagerten oder nicht ausgelagerten Pool zugeordnet werden.
Alle Microsoft-Dateisysteme deaktivieren die Streamkontextunterstützung für Auslagerungsdateien, indem das flag FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS im Flags2-Member von FSRTL_COMMON_FCB_HEADER deaktiviert wird, nachdem sie FsRtlSetupAdvancedHeader aufgerufen haben. (Das FASTFAT WDK-Beispiel finden Sie in der FatCreateFcb-Funktion in Strucsup.c .) Es wird dringend empfohlen, dies auch in Ihrem Dateisystem oder auf Ihren Systemen zu tun, damit sich das Betriebssystem in allen Dateisystemen konsistent verhält.
Automatisches Erweitern von Pushsperren
Pushsperren mit automatischer Erweiterung wurden in Windows 10 Version 20H2 eingeführt. Als die Sperren des Filter-Managers ursprünglich entworfen wurden, waren große Mehrprozessorsysteme sehr ungewöhnlich und RAM war wertvoll. Da solche Systeme jetzt gebräuchlich sind und der ARBEITSSPEICHER nicht so begrenzt ist, bieten Pushsperren mit automatischer Erweiterung einen vorteilhaften Kompromiss zwischen Arbeitsspeicherverbrauch und Geschwindigkeit.
Eine Pushsperre mit automatischer Erweiterung kann automatisch von einer regulären Pushsperre ohne Cachefunktion in eine Cache-fähige Pushsperre geändert werden, wenn erkannt wird, dass sie aufgrund einer großen Anzahl gleichzeitig freigegebener Acquirer einem hohen Cachekonflikt unterliegt. Die Pushsperre für die automatische Erweiterung ist größer als eine normale Pushsperre, wenn sie nicht erweitert wird, aber nicht annähernd so groß wie eine Cache-fähige Pushsperre. Dieser Pushsperrtyp ist auf Multiprozessorsystemen leistungsfähiger.
Anforderungen
Anforderung | Wert |
---|---|
Header | ntifs.h (include Ntifs.h, Fltkernel.h) |