Freigeben über


FSRTL_ADVANCED_FCB_HEADER Struktur (ntifs.h)

Die FSRTL_ADVANCED_FCB_HEADER-Struktur enthält Kontextinformationen, die ein Dateisystem über eine 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;

Angehörige

DUMMYSTRUCTNAME

Ein nicht benanntes Element, das eine Struktur vom Typ FSRTL_COMMON_FCB_HEADERenthält.

FastMutex

Ein Zeiger auf einen initialisierten schnellen Mutex, der verwendet wird, um den Zugriff auf die folgenden Member von DUMMYSTRUCTNAMEzu synchronisieren:

  • AllocationSize-
  • FileSize-
  • ValidDataLength-

Wenn vorhanden, wird das PushLock- Mitglied verwendet, um den Zugriff auf das FilterContexts Mitglied 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 ändern, indem sie FsRtlInsertPerStreamContext- und FsRtlRemovePerStreamContext-aufrufen.

PushLock

Eine Pushsperre, die verwendet wird, um den Zugriff auf die FilterContexts Liste zu synchronisieren. Dieses Feld ist nur verfügbar, beginnend mit Windows Vista (d. a., wenn das Version Bitfeld der FSRTL_COMMON_FCB_HEADER-Struktur größer oder gleich FSRTL_FCB_HEADER_V1ist).

FileContextSupportPointer

Ein Zeiger auf ein Zeigerfeld, das von der Dateisystemlaufzeitbibliothek (FSRTL) zum Nachverfolgen von Dateikontexten verwendet wird. Wenn nicht NULL-, muss dieses Element ein Zeiger auf eine PVOID-Variable innerhalb einer Dateistruktur für das Dateisystem sein, das die Struktur erstellt hat. Wenn NULL-, werden Dateikontexte nicht unterstützt. Dieses Element ist nur verfügbar, beginnend mit Windows Vista (d. a., wenn das Bitfeld Version Bitfeld der FSRTL_COMMON_FCB_HEADER-Struktur größer oder gleich FSRTL_FCB_HEADER_V1ist).

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 Bitfeld der FSRTL_COMMON_FCB_HEADER-Struktur größer oder gleich FSRTL_FCB_HEADER_V2ist).

ReservedForRemote

Wenn das Dateisystem remote ist, ist dieses Feld reserviert. Es ist nur verfügbar, beginnend mit Windows 8 (d. a., wenn das Version Bitfeld der FSRTL_COMMON_FCB_HEADER-Struktur größer oder gleich FSRTL_FCB_HEADER_V2ist).

AePushLock

Eine automatisch erweiternde Pushsperre, die anstelle PushLock- verwendet wird, um den Zugriff auf die Liste der Datenstromkontexte zu synchronisieren. Ausführliche Informationen finden Sie in Anmerkungen.

AePushlock ab Windows 10, Version 20H2 verfügbar ist (d. h., wenn das Version Bitfeld der FSRTL_COMMON_FCB_HEADER-Struktur größer oder gleich FSRTL_FCB_HEADER_V3ist), und muss durch Aufrufen von FsRtlSetupAdvancedHeaderEx2initialisiert werden.

ReservedContextLegacy

Dieses Feld ist für die Systemverwendung reserviert. Sie wird nur in Windows 8.1 bis Windows 10, Version 1803, verwendet (wenn das Version Bitfeld der FSRTL_COMMON_FCB_HEADER-Struktur größer oder gleich FSRTL_FCB_HEADER_V3ist).

BypassIoOpenCount

Erfasst, wie viele Handles derzeit geöffnet sind, BypassIO für diesen Datenstrom aktiviert ist.

Dieses Feld ist ab Windows 11 verfügbar (d. a., wenn das Version Bitfeld der FSRTL_COMMON_FCB_HEADER-Struktur größer oder gleich FSRTL_FCB_HEADER_V4ist).

ReservedContext

Reserviert für die Systemverwendung.

Dieses Feld ist ab Windows 11, Version 22H2 verfügbar (d. a., wenn das Version Bitfeld der FSRTL_COMMON_FCB_HEADER-Struktur größer oder gleich FSRTL_FCB_HEADER_V5ist).

Bemerkungen

Die FSRTL_ADVANCED_FCB_HEADER Struktur ist eine Obermenge der FSRTL_COMMON_FCB_HEADER Struktur. Dateisysteme (einschließlich Legacyfilter- und Minifiltertreiber, 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.

Flagge Bedeutung
FSRTL_FLAG_ADVANCED_HEADER Im Flags Mitglied der FSRTL_COMMON_FCB_HEADER Struktur festgelegt, gibt dieses Kennzeichen die Unterstützung des Dateisystemtreibers für FSRTL_ADVANCED_FCB_HEADER Strukturen an. Dieses Kennzeichen sollte nicht geändert werden.
FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS Dieses Flag wird im Flags2 Member von FSRTL_COMMON_FCB_HEADERfestgelegt, und dieses Kennzeichen gibt die Unterstützung für Filtertreiberkontexte an. Dieses Kennzeichen kann nur für Auslagerungsdateien gelöscht werden (siehe Informationen nach der Tabelle).

Dateisysteme müssen das FsContext Mitglied jedes Dateiobjekts festlegen, um auf eine FSRTL_ADVANCED_FCB_HEADER Struktur zu verweisen. Diese Struktur kann innerhalb einer Kontextobjektstruktur eingebettet werden, die spezifisch für einen Dateisystemdatenstrom ist (der Rest der Struktur ist dateisystemspezifisch). In der Regel ist diese Struktur ein Dateisteuerungsblock (FCB). Bei einigen Dateisystemen, die mehrere Datenströme unterstützen, z. B. NTFS, handelt es sich jedoch um einen Datenstromsteuerungsblock (Stream Control Block, SCB). Beachten Sie, dass FCBs und SCBs für alle Klassen offener 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 von einem nicht seitengebundenen Pool zugewiesen werden. Andernfalls kann sie aus einem ausgelagerten oder nicht ausgelagerten Pool zugewiesen werden.

Alle Microsoft-Dateisysteme deaktivieren die Streamkontextunterstützung für das Auslagerung von Dateien, indem sie das FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS Flag im Flags2 Mitglied von FSRTL_COMMON_FCB_HEADER löschen, nachdem sie FsRtlSetupAdvancedHeaderaufgerufen haben. (Siehe FatCreateFcb Funktion in Strucsup.c für das FASTFAT WDK-Beispiel.) Sie werden dringend ermutigt, dasselbe in Ihrem Dateisystem oder Ihren Systemen zu tun, damit sich das Betriebssystem auf einheitliche Weise in allen Dateisystemen verhält.

Automatisch erweiternde Pushsperren

Automatisch erweiterte Pushsperren wurden in Windows 10, Version 20H2, eingeführt. Als die Sperren des Filter-Managers ursprünglich entworfen wurden, waren große Multiprozessorsysteme sehr ungewöhnlich und RAM war wertvoll. Da solche Systeme jetzt üblich sind und RAM nicht so begrenzt ist, bieten automatisch erweiterte Pushsperren einen vorteilhaften Kompromiss zwischen Speicherverbrauch und Geschwindigkeit.

Eine automatisch erweiterte Pushsperre kann sich automatisch von einer normalen, nicht cachefähigen Pushsperre in eine cachefähige Pushsperre ändern, wenn erkannt wird, dass sie aufgrund einer großen Anzahl gleichzeitiger gemeinsam genutzter Acquirer einem hohen Cacheinhalt unterliegt. Die Automatisch erweiternde Pushsperre ist größer als eine normale Pushsperre, wenn sie nicht erweitert, aber nicht fast so groß wie eine cachefähige Pushsperre ist. Dieser Pushsperrtyp ist auf Multiprozessorsystemen leistungsfähiger.

Anforderungen

Anforderung Wert
Header- ntifs.h (einschließlich Ntifs.h, Fltkernel.h)

Siehe auch

FSRTL_COMMON_FCB_HEADER

FSRTL_PER_STREAM_CONTEXT

FsRtlInsertPerStreamContext-

FsRtlLookupPerStreamContext-

FsRtlRemovePerStreamContext-

FsRtlSetupAdvancedHeader

FsRtlSetupAdvancedHeaderEx

FsRtlSetupAdvancedHeaderEx2

FsRtlTeardownPerStreamContexts