FwpsStreamInjectAsync0-Funktion (fwpsk.h)
Die FwpsStreamInjectAsync0-Funktion fügt TCP-Datensegmente in einen TCP-Datenstrom ein.
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 Einfügungshandle, das zuvor durch einen Aufruf des FwpsInjectionHandleCreate0 Funktion.
[in, optional] injectionContext
Ein optionales Handle für den Einfügungskontext.
[in] flags
Reserviert. Legendentreiber sollten diesen Parameter auf 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 FWPS_METADATA_FIELD_FLOW_HANDLE Metadatenwert bereitgestellt, den das Filtermodul für die klassifizierenFn Legendenfunktion des Popuptreibers bereitgestellt hat.
[in] calloutId
Der Laufzeitbezeichner für die Legende im Filtermodul. Dieser Bezeichner wurde zurückgegeben, wenn der Legendentreiber entweder die FwpsCalloutRegister0- oder FwpsCalloutRegister1- Funktionen aufgerufen hat, um die Legende beim Filtermodul 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 einer Legende im layerId Member der FWPS_INCOMING_VALUES0 Struktur bereitgestellt, die das Filtermodul an die klassifizierenFn Legendenfunktion des Popuptreibers übergeben hat.
[in] streamFlags
Flags, die Merkmale des Datenstroms angeben, in den die Daten eingefügt werden sollen.
Wenn Daten in einen eingehenden Datenstrom eingefügt werden, gibt ein Popuptreiber ein oder mehrere der folgenden Flags an:
FWPS_STREAM_FLAG_RECEIVE
Gibt an, dass die Daten in den eingehenden Datenstrom eingefügt werden sollen. Dieses Kennzeichen 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 festgelegt werden soll, damit die Daten in den eingehenden Datenstrom eingefügt werden.
FWPS_STREAM_FLAG_RECEIVE_EXPEDITED
Gibt an, dass die daten, die in den eingehenden Datenstrom eingefügt werden, hochprioritäts- und out-of-band-Daten sind.
FWPS_STREAM_FLAG_RECEIVE_PUSH
Gibt an, dass die eingehenden Daten mit dem im TCP-Header festgelegten PUSH-Flag angekommen sind, was angibt, dass der Absender eine sofortige Datenübertragung anfordert. Unerwünschte Verzögerungen bei der Datenübertragung können auftreten, wenn dieses Flag nicht festgelegt ist. Dieses Kennzeichen ist ab Windows Vista mit SP1 verfügbar.
Wenn Daten in einen ausgehenden Datenstrom eingefügt werden, gibt ein Popuptreiber ein oder mehrere der folgenden Flags an:
FWPS_STREAM_FLAG_SEND
Gibt an, dass die Daten in den ausgehenden Datenstrom eingefügt werden sollen. Dieses Kennzeichen 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, hochprioritäts- und out-of-band-Daten sind.
FWPS_STREAM_FLAG_SEND_NODELAY
Gibt an, dass der Legendentreiber anfordert, dass keine Pufferung der Daten vorhanden ist, die in den ausgehenden Datenstrom eingefügt werden.
FWPS_STREAM_FLAG_SEND_DISCONNECT
Gibt an, dass der Datenstrom getrennt werden soll, nachdem die Daten in den ausgehenden Datenstrom eingefügt wurden. Der Netzwerkstapel legt das FIN-Flag im TCP-Header des letzten Pakets fest, das gesendet wird.
[in, out] netBufferList
Ein Zeiger auf eine NET_BUFFER_LIST Struktur, die die Daten beschreibt, die in den Datenstrom eingefügt werden. Ein Popuptreiber weist eine NET_BUFFER_LIST Struktur zu, die zum Einfügen von Daten in einen Datenstrom verwendet werden soll, indem die FwpsAllocateCloneNetBufferList0, FwpsAllocateNetBufferAndNetBufferList0oder FwpsCloneStreamData0 Funktionen. Die NET_BUFFER_LIST-Struktur kann eine Kette von Netzwerkpufferlisten beschreiben. Wenn der parameter streamFlagsFWPS_STREAM_FLAG_RECEIVE_DISCONNECT oder FWPS_STREAM_FLAG_SEND_DISCONNECTist, kann netBufferList-NULL-sein.
[in] dataLength
Die Anzahl der Bytes, die in den Datenstrom eingefügt werden.
[in] completionFn
Ein Zeiger auf eine completionFn Legendenfunktion, die vom Legendentreiber bereitgestellt wird. Das Filtermodul ruft diese Funktion auf, nachdem die Paketdaten, die vom netBufferList- Parameter beschrieben werden, 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 Parameter NULL- ist und der streamFlags-parameter entweder FWPS_STREAM_FLAG_RECEIVE_DISCONNECT oder FWPS_STREAM_FLAG_SEND_DISCONNECT festgelegt hat, wird die completionFn--Funktion nicht aufgerufen.
Dieser Parameter ist erforderlich und kann nicht NULL-werden. Wenn es 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-werden.
Rückgabewert
Die FwpsStreamInjectAsync0 einen NTSTATUS-Code wie einen der folgenden Funktionen aus.
Rückgabecode | Beschreibung |
---|---|
|
Die Einfügung in den Datenstrom wurde erfolgreich initiiert. Das Filtermodul ruft die Vervollständigungsfunktion auf, die angegeben wurde, als die NET_BUFFER_LIST Struktur zugewiesen wurde, nachdem das Filtermodul die Daten in den Datenstrom eingefügt hat. |
|
Der TCP/IP-Netzwerkstapel ist nicht bereit, die Einfügung von Datenstromdaten zu akzeptieren. |
|
Der Einspritzpunkt wird geschlossen. |
|
Fehler. |
Bemerkungen
Ein Beschriftungstreiber ruft die FwpsStreamInjectAsync0-Funktion innerhalb der klassifizierenFn Popupfunktion auf, um neue oder geklonte Daten in den datenstrom einzufügen, der derzeit verarbeitet wird. Ein Popuptreiber kann die FwpsStreamInjectAsync0-Funktion nur aufrufen, wenn er einen Datenfluss auf der Datenstromebene verarbeitet.
Ein Legendentreiber kann auch die FwpsStreamInjectAsync0--Funktion außerhalb der klassifizierenFn Legendenfunktion aufrufen, um Daten in einen Datenstrom einzufügen, der derzeit zurückgestellt ist. Ein Datenstrom wird verzögert, wenn die klassifizierenFn Legendenfunktion des streamAction Member des Popups festgelegt wird. FWPS_STREAM_CALLOUT_IO_PACKET0 Struktur zum FWPS_STREAM_ACTION_DEFER.
Darüber hinaus kann ein Popuptreiber die FwpsStreamInjectAsync0- Funktion außerhalb der klassifizierenFn Legendenfunktion aufrufen, um Daten in einen Datenstrom einzufügen, nachdem eine FIN-Anzeige eingestiftet wurde.
Alternativ kann ein Beschriftungstreiber die FwpsStreamInjectAsync0- Funktion aus einem beliebigen Threadkontext außerhalb der klassifizierenFn Legendenfunktion aufrufen, wenn der Legendentreiber alle daten klont und blockiert, die für die Out-of-Band-Verarbeitung angegeben sind. Ein Popuptreiber, der alle angegebenen Daten zur Verarbeitung an den Benutzermodus umleitet, kann auf diese Weise die FwpsStreamInjectAsync0-Funktion aufrufen.
Eine Legende kann ein Datensegment durch ersten Klonen eines Datensegments mit einem Aufruf der FwpsCloneStreamData0-Funktion, gefolgt davon, dass das Datensegment blockiert wird, indem FWP_ACTION_BLOCK im actionType- Member der FWPS_CLASSIFY_OUT0-Struktur festgelegt wird.
Injizierte Datenstromdaten werden nicht für die Legende angegeben, sie werden jedoch für Das Streamen von Legenden aus untergeordneten Unterlayern verfügbar gemacht.
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 FwpsFreeCloneNetBufferList0freigegeben werden.
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Verfügbar ab Windows Vista. |
Zielplattform- | Universal |
Header- | fwpsk.h (include Fwpsk.h) |
Library | Fwpkclnt.lib |
IRQL- | <= DISPATCH_LEVEL |