Freigeben über


FwpsStreamInjectAsync0-Funktion (fwpsk.h)

Die FwpsStreamInjectAsync0-Funktion fügt TCP-Datensegmente in einen TCP-Datenstrom ein.

HinweisFwpsStreamInjectAsync0 ist eine bestimmte Version von FwpsStreamInjectAsync. Weitere Informationen finden Sie unter WFP-Version-Independent Namen und Spezifische Windows-Versionen .
 

Syntax

NTSTATUS FwpsStreamInjectAsync0(
  [in]           HANDLE                injectionHandle,
  [in, optional] HANDLE                injectionContext,
  [in]           UINT32                flags,
  [in]           UINT64                flowId,
  [in]           UINT32                calloutId,
  [in]           UINT16                layerId,
  [in]           UINT32                streamFlags,
  [in, out]      NET_BUFFER_LIST       *netBufferList,
  [in]           SIZE_T                dataLength,
  [in]           FWPS_INJECT_COMPLETE0 completionFn,
  [in, optional] HANDLE                completionContext
);

Parameter

[in] injectionHandle

Ein Einschleusungshandle, das zuvor durch einen Aufruf von erstellt wurde FwpsInjectionHandleCreate0-Funktion .

[in, optional] injectionContext

Ein optionales Handle für den Einschleusungskontext.

[in] flags

Reserviert. Legendentreiber sollten diesen Parameter auf 0 (null) festlegen.

[in] flowId

Ein Laufzeitbezeichner, der den Datenfluss angibt, in den die Daten eingefügt werden sollen. Der Laufzeitbezeichner für einen Datenfluss wird einem Legendentreiber über den Metadatenwert FWPS_METADATA_FIELD_FLOW_HANDLE bereitgestellt, den die Filter-Engine für die Legendenfunktion klassifizierenFn des Callout-Treibers bereitgestellt hat.

[in] calloutId

Der Laufzeitbezeichner für die Legende in der Filter-Engine. Dieser Bezeichner wurde zurückgegeben, wenn der Legendentreiber entweder die Funktionen FwpsCalloutRegister0 oder FwpsCalloutRegister1 aufgerufen hat, um die Legende bei der Filter-Engine zu registrieren.

[in] layerId

Der Laufzeitbezeichner für die Filterebene, auf der der Datenstrom verarbeitet wird. Dieser Wert muss entweder FWPS_LAYER_STREAM_V4 oder FWPS_LAYER_STREAM_V6 sein. Der Laufzeitbezeichner für die Ebene, auf der der Datenstrom verarbeitet wird, wird für eine Legende im layerId-Member der FWPS_INCOMING_VALUES0-Struktur bereitgestellt, die die Filter-Engine an die Legendenfunktion klassifizierenFn des Callout-Treibers übergeben hat.

[in] streamFlags

Flags, die Merkmale des Datenstroms angeben, in den die Daten eingefügt werden sollen.

Beim Einfügen von Daten in einen eingehenden Datenstrom gibt ein Legendentreiber eines oder mehrere der folgenden Flags an:

FWPS_STREAM_FLAG_RECEIVE

Gibt an, dass die Daten in den eingehenden Datenstrom eingefügt werden sollen. Dieses Flag ist erforderlich, wenn Daten in einen eingehenden Datenstrom eingefügt werden.

FWPS_STREAM_FLAG_RECEIVE_DISCONNECT

Gibt an, dass das FIN-Flag im TCP-Header für die Daten festgelegt werden soll, die in den eingehenden Datenstrom eingefügt werden.

Hinweis Wenn dieses Flag festgelegt ist, muss auch das FWPS_STREAM_FLAG_RECEIVE-Flag festgelegt werden, andernfalls wird STATUS_FWP_INVALID_PARAMETER zurückgegeben.
 

FWPS_STREAM_FLAG_RECEIVE_EXPEDITED

Gibt an, dass die Daten, die in den eingehenden Datenstrom eingefügt werden, Out-of-Band-Daten mit hoher Priorität haben.

FWPS_STREAM_FLAG_RECEIVE_PUSH

Gibt an, dass die eingehenden Daten mit dem im TCP-Header festgelegten PUSH-Flag eingetroffen sind, was angibt, dass der Absender eine sofortige Datenübertragung anfordert. Wenn dieses Flag nicht festgelegt ist, kann es zu unerwünschten Verzögerungen bei der Datenübertragung kommen. Dieses Flag ist ab Windows Vista mit SP1 verfügbar.

Wenn Daten in einen ausgehenden Datenstrom eingefügt werden, gibt ein Legendentreiber eines oder mehrere der folgenden Flags an:

FWPS_STREAM_FLAG_SEND

Gibt an, dass die Daten in den ausgehenden Datenstrom eingefügt werden sollen. Dieses Flag ist erforderlich, wenn Daten in einen ausgehenden Datenstrom eingefügt werden.

FWPS_STREAM_FLAG_SEND_EXPEDITED

Gibt an, dass die Daten, die in den ausgehenden Datenstrom eingefügt werden, Out-of-Band-Daten mit hoher Priorität haben.

FWPS_STREAM_FLAG_SEND_NODELAY

Gibt an, dass der Legendentreiber anfordert, dass es keine Pufferung der Daten gibt, die in den ausgehenden Datenstrom eingefügt werden.

FWPS_STREAM_FLAG_SEND_DISCONNECT

Gibt an, dass der Datenstrom getrennt werden soll, nachdem die Daten, die in den ausgehenden Datenstrom eingefügt wurden, gesendet wurden. Der Netzwerkstapel legt das FIN-Flag im TCP-Header des letzten gesendeten Pakets fest.

Hinweis Wenn dieses Flag festgelegt ist, muss auch das FWPS_STREAM_FLAG_SEND-Flag festgelegt werden, andernfalls wird STATUS_FWP_INVALID_PARAMETER zurückgegeben.
 

[in, out] netBufferList

Ein Zeiger auf eine NET_BUFFER_LIST-Struktur , die die Daten beschreibt, die in den Datenstrom eingefügt werden. Ein Legendentreiber weist eine NET_BUFFER_LIST-Struktur zu, die zum Einfügen von Daten in einen Datenstrom verwendet werden soll, indem die FwpsAllocateCloneNetBufferList0, FwpsAllocateNetBufferAndNetBufferList0 oder FwpsCloneStreamData0 . Die NET_BUFFER_LIST-Struktur kann eine Kette von Netzwerkpufferlisten beschreiben. Wenn der streamFlags-ParameterFWPS_STREAM_FLAG_RECEIVE_DISCONNECT oder FWPS_STREAM_FLAG_SEND_DISCONNECT ist, kann netBufferListNULL sein.

[in] dataLength

Die Anzahl der Bytes der Daten, die in den Datenstrom eingefügt werden.

[in] completionFn

Ein Zeiger auf eine vom Legendentreiber bereitgestellte completionFn-Beschriftungsfunktion. Die Filter-Engine ruft diese Funktion auf, nachdem die durch den netBufferList-Parameter beschriebenen Paketdaten in den Netzwerkstapel eingefügt wurden.

Wenn der netBufferList-Parameter eine NET_BUFFER_LIST-Kette beschreibt, wird completionFn einmal für jede NET_BUFFER_LIST in der Kette aufgerufen.

Wenn der netBufferList-ParameterNULL ist und der streamFlags-Parameter entweder FWPS_STREAM_FLAG_RECEIVE_DISCONNECT oder FWPS_STREAM_FLAG_SEND_DISCONNECT festgelegt ist, wird die completionFn-Funktion nicht aufgerufen.

Dieser Parameter ist erforderlich und darf nicht NULL sein. Wenn der Wert NULL ist, wird STATUS_FWP_NULL_POINTER zurückgegeben.

[in, optional] completionContext

Ein Zeiger auf einen vom Legendentreiber bereitgestellten Kontext, der an die Legendenfunktion übergeben wird, auf die der completionFn-Parameter verweist. Dieser Parameter ist optional und kann NULL sein.

Rückgabewert

Die FwpsStreamInjectAsync0-Funktion ist ein NTSTATUS-Code, z. B. einer der folgenden.

Rückgabecode Beschreibung
STATUS_SUCCESS
Die Einschleusung in den Datenstrom wurde erfolgreich initiiert. Die Filter-Engine ruft die Vervollständigungsfunktion auf, die angegeben wurde, als die NET_BUFFER_LIST-Struktur zugeordnet wurde, nachdem die Filter-Engine die Einschleusung der Daten in den Datenstrom abgeschlossen hat.
STATUS_FWP_TCPIP_NOT_READY
Der TCP/IP-Netzwerkstapel ist nicht bereit, die Einschleusung von Datenstromdaten zu akzeptieren.
STATUS_FWP_INJECT_HANDLE_CLOSING
Der Injektionshandle wird geschlossen.
Andere status Codes
Ein Fehler ist aufgetreten.

Hinweise

Ein Legendentreiber ruft die FwpsStreamInjectAsync0-Funktion aus der Aufruffunktion klassifizierenFn einer Legende auf, um neue oder geklonte Daten in den Datenstrom einzufügen, der gerade verarbeitet wird. Ein Legendentreiber kann die FwpsStreamInjectAsync0-Funktion nur aufrufen, wenn ein Datenfluss auf der Streamebene verarbeitet wird.

Ein Legendentreiber kann auch die FwpsStreamInjectAsync0-Funktion außerhalb der Beschriftungsfunktion klassifizierenFn einer Legende aufrufen, um Daten in einen Datenstrom einzufügen, der derzeit verzögert wird. Ein Datenstrom wird verzögert, wenn die Beschriftungsfunktion klassifizierenFn den streamAction-Member des FWPS_STREAM_CALLOUT_IO_PACKET0 Struktur zu FWPS_STREAM_ACTION_DEFER.

Darüber hinaus kann ein Legendentreiber die FwpsStreamInjectAsync0-Funktion außerhalb der Beschriftungsfunktion klassifizierenFn einer Legende aufrufen, um Daten in einen Datenstrom einzufügen, nachdem eine FIN-Anzeige erstellt wurde.

Alternativ kann ein Legendentreiber die FwpsStreamInjectAsync0-Funktion aus einem beliebigen Threadkontext außerhalb der Legendenfunktion klassifizierenFn aufrufen, wenn der Legendentreiber alle Daten klont und blockiert, die für die Out-of-Band-Verarbeitung angegeben sind. Ein Legendentreiber, der alle angegebenen Daten zur Verarbeitung in den Benutzermodus umleitet, kann die FwpsStreamInjectAsync0-Funktion auf diese Weise aufrufen.

Eine Legende kann ein Datensegment durch klonen, indem es zuerst mit einem Aufruf der Funktion FwpsCloneStreamData0 geklont wird, gefolgt von der Blockierung des Datensegments, indem FWP_ACTION_BLOCK im actionType-Element der FWPS_CLASSIFY_OUT0-Struktur festgelegt wird.

Injizierte Datenstromdaten werden der Legende nicht erneut angezeigt, aber sie werden für das Streamen von Legenden von Untergeordneten mit geringerer Gewichtung zur Verfügung gestellt.

Wenn der Rückgabewert nicht STATUS_SUCCESS ist, wird die Vervollständigungsfunktion nicht aufgerufen. In diesem Fall muss die Netzwerkpufferliste, auf die von netBufferList verwiesen wird, durch einen Aufruf von FwpsFreeNetBufferList0 oder FwpsFreeCloneNetBufferList0 freigegeben werden.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar ab Windows Vista.
Zielplattform Universell
Header fwpsk.h (include Fwpsk.h)
Bibliothek Fwpkclnt.lib
IRQL <= DISPATCH_LEVEL

Weitere Informationen

FWPS_INCOMING_VALUES0

FWPS_STREAM_CALLOUT_IO_PACKET0 FwpsAllocateCloneNetBufferList0 FwpsAllocateNetBufferAndNetBufferList0

FwpsCalloutRegister0

FwpsCalloutRegister1

FwpsCloneStreamData0

FwpsInjectionHandleCreate0

FwpsInjectionHandleDestroy0

NET_BUFFER_LIST

klassifizierenFn

completionFn