FwpsInjectTransportSendAsync1-Funktion (fwpsk.h)
Die FwpsInjectTransportSendAsync1-Funktion fügt Paketdaten aus den Transport-, Datagrammdaten- oder ICMP-Fehlerebenen in den Sendedatenpfad ein. Diese Funktion unterscheidet sich von der vorherigen Version (FwpsInjectTransportSendAsync0), da sie eine aktualisierte Parameterstruktur als Argument verwendet.
Syntax
NTSTATUS FwpsInjectTransportSendAsync1(
[in] HANDLE injectionHandle,
[in, optional] HANDLE injectionContext,
[in] UINT64 endpointHandle,
[in] UINT32 flags,
[in, optional] FWPS_TRANSPORT_SEND_PARAMS1 *sendArgs,
[in] ADDRESS_FAMILY addressFamily,
[in] COMPARTMENT_ID compartmentId,
[in, out] NET_BUFFER_LIST *netBufferList,
[in] FWPS_INJECT_COMPLETE0 completionFn,
[in, optional] HANDLE completionContext
);
Parameter
[in] injectionHandle
Ein Einschleusungshandle, der zuvor durch einen Aufruf des erstellt wurde FwpsInjectionHandleCreate0-Funktion .
[in, optional] injectionContext
Ein optionales Handle für den Einschleusungskontext. Falls angegeben, kann sie durch Aufrufen der Funktion FwpsQueryPacketInjectionState0 abgerufen werden, wenn der Paketeinschleusungszustand FWPS_PACKET_INJECTION_STATEFWPS_PACKET_INJECTED_BY_SELF oder FWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELF ist.
[in] endpointHandle
Ein Handle, das den Stapeltransportendpunkt im Sendedatenpfad angibt, in den das Paket eingefügt werden soll. Dieses Endpunkthandle wird einer Legende über das transportEndpointHandle-Element des FWPS_INCOMING_METADATA_VALUES0 Struktur, die an die Legendenfunktion klassifizierenFn des Legendentreibers übergeben wird. Legendentreiber sollten das bereitgestellte Handle verwenden, um geklonte Pakete so schnell wie möglich wieder in den Datenpfad einzufügen, bevor der Socket, der dem Stapelendpunkt zugeordnet ist, geschlossen wird und das Handle nicht mehr gültig wird.
[in] flags
Dieser Parameter ist reserviert. Legendentreiber müssen diesen Parameter auf 0 festlegen.
[in, optional] sendArgs
Ein Zeiger auf eine FWPS_TRANSPORT_SEND_PARAMS1 Struktur, die die Eigenschaften des aktuellen ausgehenden Pakets angibt. Dieser Parameter kann nur NULL sein, wenn die zu einfügende Nettopufferliste einen IP-Header enthält (z. B. wenn das Paket über einen rohen Socket gesendet wird).
[in] addressFamily
Eine der folgenden Adressfamilien:
AF_INET
Die IPv4-Adressfamilie.
AF_INET6
Die IPv6-Adressfamilie.
[in] compartmentId
Der Bezeichner des Routingfachs, in das die Paketdaten eingefügt werden, wird als COMPARTMENT_ID Typ angegeben. Dieser Bezeichner wird einer Legende über das compartmentId-Element des FWPS_INCOMING_METADATA_VALUES0 Struktur, die an die Legendenfunktion klassifizierenFn des Legendentreibers übergeben wird. Wenn das compartmentId-Element für Legenden verfügbar ist, wird FWPS_METADATA_FIELD_COMPARTMENT_ID im currentMetadataValues-Element festgelegt. Legen Sie andernfalls diesen Parameter auf UNSPECIFIED_COMPARTMENT_ID fest.
[in, out] netBufferList
Ein Zeiger auf eine NET_BUFFER_LIST-Struktur , die die Paketdaten beschreibt, die eingefügt werden. Ein Legendentreiber weist eine NET_BUFFER_LIST Struktur zu, die zum Einfügen von Paketdaten verwendet werden soll, indem er entweder die FwpsAllocateCloneNetBufferList0-Funktion oder die FwpsAllocateNetBufferAndNetBufferList0-Funktion .
[in] completionFn
Ein Zeiger auf eine vom Legendentreiber bereitgestellte funktion completionFn . Die Filter-Engine ruft diese Funktion auf, nachdem die Paketdaten, die durch den netBufferList-Parameter beschrieben werden, in den Netzwerkstapel eingefügt wurden.
[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 FwpsInjectTransportSendAsync1-Funktion gibt einen der folgenden NTSTATUS-Codes zurück:
Rückgabecode | Beschreibung |
---|---|
|
Die Paketdateneinschleusung wurde erfolgreich initiiert. Die Filter-Engine ruft die Vervollständigungsfunktion auf, nachdem die Filter-Engine die Einschleusung der Paketdaten in den Netzwerkstapel abgeschlossen hat oder wenn später ein Fehler aufgetreten ist. Im Falle eines Fehlers gibt das Statuselement der abgeschlossenen NET_BUFFER_LIST-Struktur den Grund für den Fehler an. |
|
Der TCP/IP-Netzwerkstapel ist nicht bereit, die Einschleusung von Paketdaten zu akzeptieren. |
|
Der Einschleusungsgriff wird geschlossen. |
|
Ein Fehler ist aufgetreten. |
Hinweise
Ein Legendentreiber ruft die Funktion FwpsInjectTransportSendAsync1 auf, um Paketdaten aus den Transport-, Datagrammdaten- oder ICMP-Fehlerebenen in den Sendedatenpfad einzufügen. Auf diesen Ebenen ist der IP-Header möglicherweise noch nicht gebildet, und wenn die IPsec-Richtlinie aktiv ist, werden die Paketdaten nicht verschlüsselt oder signiert. Daher ist diese Funktion ideal für die Paketüberprüfung in einer IPsec-fähigen Umgebung geeignet.
Diese Funktion kann asynchron ausgeführt werden.
Wenn der Rückgabewert nicht STATUS_SUCCESS ist, wird die Vervollständigungsfunktion nicht aufgerufen. In diesem Fall muss die von netBufferList angezeigte Netzpufferliste durch einen Aufruf von FwpsFreeNetBufferList0 oder FwpsFreeCloneNetBufferList0 freigegeben werden.
Legendentreiber führen normalerweise Daten in den Netzwerkstapel ein, wenn sie Paketdaten ändern. Weitere Informationen dazu, wie ein Legendentreiber Paketdaten ändern kann, finden Sie unter Callout-Treibervorgänge.
Das eingefügte Paket kann dem Legendentreiber erneut angezeigt werden. Um endlose Schleifen zu verhindern, sollte der Treiber zuerst die FwpsQueryPacketInjectionState0-Funktion vor dem Aufrufen der Calloutfunktion klassifizierenFn , und lassen Sie Pakete zu, deren Einschleusungszustand aufFWPS_PACKET_INJECTED_BY_SELF oder FWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELF festgelegt FWPS_PACKET_INJECTION_STATE.
Der endpunktHandle-Parameter und die im
FWPS_TRANSPORT_SEND_PARAMS1 Struktur, auf die der sendArgs-Parameter verweist, werden für Legenden aus den folgenden Netzwerkebenen bereitgestellt:
- FWPS_LAYER_OUTBOUND_TRANSPORT_V4
- FWPS_LAYER_OUTBOUND_TRANSPORT_V6
- FWPS_LAYER_DATAGRAM_DATA_V4 (wenn ausgehende Richtung mit FWP_DIRECTION_OUTBOUND angegeben wird)
- FWPS_LAYER_DATAGRAM_DATA_V6 (wenn ausgehende Richtung mit FWP_DIRECTION_OUTBOUND angegeben wird)
- FWPS_LAYER_OUTBOUND_ICMP_ERROR_V4
- FWPS_LAYER_OUTBOUND_ICMP_ERROR_V6
Das Datagramm gehört zu einem Unformatierten Socket, wenn beides zutrifft:
- Für das currentMetadataValues-Element der FWPS_INCOMING_METADATA_VALUES0-Struktur ist das FWPS_METADATA_FIELD_IP_HEADER_SIZE-Flag festgelegt.
- Das ipHeaderSize-Element der FWPS_INCOMING_METADATA_VALUES0-Struktur ist größer als 00.
Wenn das Datagramm auf den folgenden Netzwerkebenen zu einem rohen Socket gehört, müssen Sie die Member headerIncludeHeader und headerIncludeHeaderLength der FWPS_INCOMING_METADATA_VALUES0-Struktur in das entsprechende Element der FWPS_TRANSPORT_SEND_PARAMS1-Struktur kopieren, auf die der sendArgs-Parameter verweist:
- FWPS_LAYER_DATAGRAM_DATA_V4 (wenn ausgehende Richtung mit FWP_DIRECTION_OUTBOUND angegeben wird)
- FWPS_LAYER_DATAGRAM_DATA_V6 (wenn ausgehende Richtung mit FWP_DIRECTION_OUTBOUND angegeben wird)
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Verfügbar ab Windows 7. |
Zielplattform | Universell |
Header | fwpsk.h (include fwpsk.h) |
Bibliothek | Fwpkclnt.lib |
IRQL | <= DISPATCH_LEVEL |