Dateisystemunterstützung für Kontexte

Um Dateikontexte (falls zutreffend), Streamkontexte und Dateiobjektkontexte (Streamhandle) zu unterstützen, muss ein Dateisystem die FSRTL_ADVANCED_FCB_HEADER-Struktur verwenden. Alle Microsoft Windows-Dateisysteme verwenden diese Struktur, und alle Dateisystementwickler von Drittanbietern werden dringend empfohlen, dies ebenfalls zu tun. Weitere Informationen finden Sie unter FsRtlSetupAdvancedHeader und FSRTL_ADVANCED_FCB_HEADER.

Die NTFS- und FAT-Dateisysteme unterstützen keine Datei-, Stream- oder Dateiobjektkontexte für Auslagerungsdateien, im Voraberstellungs- oder Post-Close-Pfad oder für IRP_MJ_NETWORK_QUERY_OPEN Vorgänge.

Ein Minifiltertreiber kann ermitteln, ob ein Dateisystem Streamkontexte und Dateiobjektkontexte für ein bestimmtes Dateiobjekt unterstützt, indem FltSupportsStreamContexts bzw . FltSupportsStreamHandleContexts aufgerufen wird.

Dateikontexte sind unter Windows Vista und höher verfügbar.

Bei Dateisystemen (z. B. FAT), die nur einen einzelnen Datenstrom pro Datei unterstützen, entsprechen Dateikontexte Streamkontexten. Solche Dateisysteme unterstützen normalerweise Streamkontexte, aber keine Dateikontexte. Stattdessen bietet der Filter-Manager diese Unterstützung unter Verwendung der vorhandenen Unterstützung für Streamkontexte des Dateisystems. Für Minifiltertreiberinstanzen, die an diese Dateisysteme angefügt sind, gibt FltSupportsFileContextsFALSE zurück, während FltSupportsFileContextsExTRUE zurückgibt (wenn ein gültiger Wert ohne NULL für den Instance-Parameter übergeben wird).

Wenn ein Kontexttyp für eine Datei nicht unterstützt wird, kann der Minifilter keinen Kontext dieses Typs an diese Datei anfügen.

Um Dateikontexte zu unterstützen, muss ein Dateisystem Folgendes ausführen:

  • Betten Sie ein FileContextSupportPointer-Element vom Typ PVOID in seine Dateikontextstruktur ein, normalerweise den Dateikontextblock (FCB). Das Dateisystem muss diesen Member mit NULL initialisieren.

  • Verwenden Sie FsRtlSetupAdvancedHeaderEx (anstelle von FsRtlSetupAdvancedHeader), um die Streamkontextstruktur zu initialisieren, und übergeben Sie einen gültigen Zeiger auf das FileContextSupportPointer-Element (eingebettet in die entsprechende Dateikontextstruktur) für den FileContextSupportPointer-Parameter . Weitere Informationen finden Sie unter FsRtlSetupAdvancedHeaderEx und FSRTL_ADVANCED_FCB_HEADER.

  • Rufen Sie FsRtlTeardownPerFileContexts auf, um alle Dateikontextstrukturen frei zu geben, die Filter- und Minifiltertreibern einer Datei zugeordnet sind, wenn das Dateisystem seine Dateikontextstruktur für die Datei löscht.