Freigeben über


FsRtlInitPerStreamContext-Makro (ntifs.h)

Das Makro FsRtlInitPerStreamContext initialisiert eine Filtertreiberkontextstruktur.

Syntax

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

Parameter

_fc

Zeiger auf eine vom Aufrufer zugewiesene FSRTL_PER_STREAM_CONTEXT Struktur, die zum Verwalten von Kontextinformationen für einen Dateistream verwendet werden soll. Diese Struktur kann unverändert verwendet oder in eine treiberdefinierte Pro-Stream-Kontextstruktur eingebettet werden. Beide Strukturtypen werden häufig durch Aufrufen von ExAllocatePoolWithTag zugeordnet.

_owner

Zeiger auf eine vom Aufrufer zugewiesene Variable, die den Besitzer der Kontextstruktur pro Stream eindeutig identifiziert. Das Format dieser Variablen ist Filtertreiber − spezifisch. Filterautoren sollten einen sinnvollen und bequemen Wert auswählen, z. B. die Adresse eines Treiber- oder Geräteobjekts. Aufrufer müssen einen Wert ohne NULL für diesen Parameter angeben.

_inst

Zeiger auf einen Filtertreiber − zugeordnete Variable, die verwendet werden kann, um zwischen Datenstromkontextstrukturen zu unterscheiden, die vom gleichen Filtertreiber erstellt wurden. Das Format dieser Variablen ist Filtertreiber − spezifisch. Filterautoren sollten einen sinnvollen und bequemen Wert auswählen, z. B. die Adresse des Streamkontextobjekts für den Dateistream. (Um diese Adresse aus einem Dateiobjekt abzurufen, verwenden Sie das Makro FsRtlGetPerStreamContextPointer .) Dieser Parameter ist optional und kann NULL sein.

_cb

Zeiger auf eine Rückrufroutine, die die Kontextstruktur pro Stream freigibt. Aufrufer müssen einen Wert ohne NULL 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 pro Stream zu befreiende Kontextstruktur. Die FreeCallback-Routine wandelt diesen Zeiger in der Regel auf den entsprechenden Strukturzeigertyp um und gibt ihn durch Aufrufen von ExFreePool frei.

Rückgabewert

Keine

Bemerkungen

Ein Dateisystemfiltertreiber verwendet das FsRtlInitPerStreamContext-Makro , um eine neu zugeordnete Pro-Stream-Kontextstruktur zu initialisieren, bevor sie einem Dateistream zugeordnet wird. Die initialisierte Kontextstruktur kann als Parameter an FsRtlInsertPerStreamContext übergeben werden.

FsRtlInitPerStreamContext speichert die Adresse der FreeCallback-Routine im FreeCallback-Member der FSRTL_PER_STREAM_CONTEXT-Struktur.

Die FreeCallback-Routine wird unter IRQL <= APC_LEVEL aufgerufen. In der Regel wird es bei IRQL PASSIVE_LEVEL aufgerufen.

Hinweis Die FreeCallback-Routine kann nicht rekursiv in das Dateisystem aufrufen oder Dateisystemressourcen abrufen. Außerdem muss bei dieser Routine davon ausgegangen werden, dass das Dateiobjekt für den Dateistream bereits freigegeben wurde.
 
Um eine initialisierte Pro-Stream-Kontextstruktur einem Dateistream zuzuordnen, rufen Sie FsRtlInsertPerStreamContext auf.

Nachdem die Kontextstruktur einem Dateistream zugeordnet wurde, kann sie durch Aufrufen von FsRtlLookupPerStreamContext abgerufen oder durch Aufrufen von FsRtlRemovePerStreamContext entfernt werden.

Weitere Informationen finden Sie unter Nachverfolgen Per-Stream Kontexts in einem Legacy-Dateisystemfiltertreiber.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows XP; Updaterollup für Windows 2000 Service Pack 4 (SP4)
Zielplattform Desktop
Kopfzeile ntifs.h (include Ntifs.h)
IRQL Beliebige Ebene

Weitere Informationen

ExAllocatePoolWithTag

ExFreePool

FSRTL_PER_STREAM_CONTEXT

FsRtlGetPerStreamContextPointer

FsRtlInsertPerStreamContext

FsRtlLookupPerStreamContext

FsRtlRemovePerStreamContext

FsRtlSetupAdvancedHeader

FsRtlSupportsPerStreamContexts

FsRtlTeardownPerStreamContexts