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:

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)

Weitere Informationen

FSRTL_COMMON_FCB_HEADER

FSRTL_PER_STREAM_CONTEXT

FsRtlInsertPerStreamContext

FsRtlLookupPerStreamContext

FsRtlRemovePerStreamContext

FsRtlSetupAdvancedHeader

FsRtlSetupAdvancedHeaderEx

FsRtlSetupAdvancedHeaderEx2

FsRtlTeardownPerStreamContexts