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 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.
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.
[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 |
---|---|
|
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. |
|
Der TCP/IP-Netzwerkstapel ist nicht bereit, die Einschleusung von Datenstromdaten zu akzeptieren. |
|
Der Injektionshandle wird geschlossen. |
|
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 |