Freigeben über


FsRtlInitPerStreamContext-Makro (ntifs.h)

Das FsRtlInitPerStreamContext Makro initialisiert eine Kontextstruktur des Filtertreibers.

Syntax

void FsRtlInitPerStreamContext(
   _fc,
   _owner,
   _inst,
   _cb
);

Parameter

_fc

Zeiger auf eine vom Aufrufer zugewiesene FSRTL_PER_STREAM_CONTEXT Struktur, die verwendet werden soll, um Kontextinformationen für einen Dateidatenstrom zu verwalten. Diese Struktur kann wie in einer treiberdefinierten Kontextstruktur verwendet oder eingebettet werden. Beide Strukturtypen werden häufig durch Aufrufen von ExAllocatePoolWithTagzugeordnet.

_owner

Zeiger auf eine vom Aufrufer zugewiesene Variable, die den Besitzer der Kontextstruktur pro Datenstrom eindeutig identifiziert. Das Format dieser Variablen ist filtertreiber - spezifisch. Filterautoren sollten einen Wert auswählen, der sowohl sinnvoll als auch praktisch ist, z. B. die Adresse eines Treiberobjekts oder Geräteobjekts. Aufrufer müssen einen Wert ohneNULL- für diesen Parameter angeben.

_inst

Zeiger auf einen Filtertreiber – zugeordnete Variable, die verwendet werden kann, um zwischen datenstrombezogenen Kontextstrukturen zu unterscheiden, die vomselben Filtertreiber erstellt wurden. Das Format dieser Variablen ist filtertreiber - spezifisch. Filterautoren sollten einen Wert auswählen, der sowohl aussagekräftig als auch praktisch ist, z. B. die Adresse des Streamkontextobjekts für den Dateidatenstrom. (Um diese Adresse aus einem Dateiobjekt abzurufen, verwenden Sie das FsRtlGetPerStreamContextPointer Makro.) Dieser Parameter ist optional und kann NULL-werden.

_cb

Zeigen Sie auf eine Rückrufroutine, die die Kontextstruktur pro Datenstrom freigibt. Aufrufer müssen einen Wert ohneNULL- für diesen Parameter angeben. Diese Routine und ihre Parameter werden wie folgt definiert:

typedef
VOID (*PFREE_FUNCTION) (
          IN PVOID Buffer
          );

Puffer-

Zeiger auf die Kontextstruktur pro Datenstrom, die freigegeben werden soll. Die FreeCallback Routine wandelt diesen Zeiger in der Regel in den entsprechenden Strukturzeigertyp um und gibt ihn frei, indem ExFreePoolaufgerufen wird.

Rückgabewert

Nichts

Bemerkungen

Ein Dateisystemfiltertreiber verwendet die FsRtlInitPerStreamContext Makros, um eine neu zugeordnete Kontextstruktur pro Stream zu initialisieren, bevor sie einem Dateidatenstrom zugeordnet wird. Die initialisierte Kontextstruktur kann als Parameter an FsRtlInsertPerStreamContextübergeben werden.

FsRtlInitPerStreamContext speichert die Adresse der FreeCallback Routine im FreeCallback Mitglied der FSRTL_PER_STREAM_CONTEXT Struktur.

Die FreeCallback Routine wird bei IRQL <= APC_LEVEL aufgerufen. Normalerweise wird sie bei IRQL-PASSIVE_LEVEL aufgerufen.

Note The FreeCallback routine cannot rekursive call down into the file system or acquire any file system resources. Außerdem muss diese Routine davon ausgehen, dass das Dateiobjekt für den Dateistream bereits freigegeben wurde.
 
Rufen Sie FsRtlInsertPerStreamContextauf, um eine initialisierte Kontextstruktur pro Datenstrom zuzuordnen.

Nachdem die Kontextstruktur einem Dateidatenstrom zugeordnet wurde, kann sie abgerufen werden, indem FsRtlLookupPerStreamContext aufgerufen oder entfernt wird, indem FsRtlRemovePerStreamContextaufgerufen wird.

Weitere Informationen finden Sie unter Tracking Per-Stream Context in einem Legacy File System Filter Driver.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows XP; Updaterollup für Windows 2000 Service Pack 4 (SP4)
Zielplattform- Desktop
Header- ntifs.h (einschließlich Ntifs.h)
IRQL- Beliebige Ebene

Siehe auch

ExAllocatePoolWithTag-

ExFreePool-

FSRTL_PER_STREAM_CONTEXT

FsRtlGetPerStreamContextPointer-

FsRtlInsertPerStreamContext-

FsRtlLookupPerStreamContext-

FsRtlRemovePerStreamContext-

FsRtlSetupAdvancedHeader

FsRtlSupportsPerStreamContexts

FsRtlTeardownPerStreamContexts