Freigeben über


FwpsInjectTransportReceiveAsync0-Funktion (fwpsk.h)

Die FwpsInjectTransportReceiveAsync0-Funktion fügt Paketdaten aus den Transport-, Datagramm- oder ICMP-Fehlerebenen in den Empfangsdatenpfad ein.

HinweisFwpsInjectTransportReceiveAsync0 ist eine bestimmte Version von FwpsInjectTransportReceiveAsync. Weitere Informationen finden Sie unter WFP-Version-Independent Namen und zielspezifische Versionen von Windows.
 

Syntax

NTSTATUS FwpsInjectTransportReceiveAsync0(
  [in]           HANDLE                injectionHandle,
  [in, optional] HANDLE                injectionContext,
                 PVOID                 reserved,
  [in]           UINT32                flags,
  [in]           ADDRESS_FAMILY        addressFamily,
  [in]           COMPARTMENT_ID        compartmentId,
  [in]           IF_INDEX              interfaceIndex,
  [in]           IF_INDEX              subInterfaceIndex,
  [in, out]      NET_BUFFER_LIST       *netBufferList,
  [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. Wenn angegeben, kann sie durch Aufrufen der FwpsQueryPacketInjectionState0 Funktion abgerufen werden, wenn der Paketeinfügungsstatus FWPS_PACKET_INJECTION_STATEFWPS_PACKET_INJECTED_BY_SELF oder FWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELFist.

reserved

Reserviert. Legendentreiber müssen diesen Parameter auf Null festlegen.

[in] flags

Reserviert. Legendentreiber müssen diesen Parameter auf Null festlegen.

[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, angegeben als COMPARTMENT_ID Typ. Dieser Bezeichner wird einer Legende über die compartmentId Mitglied der FWPS_INCOMING_METADATA_VALUES0 Struktur, die an die klassifizierenFn Legendenfunktion des Legendentreibers übergeben wird. Wenn das compartmentId Member für Legenden verfügbar ist, wird FWPS_METADATA_FIELD_COMPARTMENT_ID im currentMetadataValues Member festgelegt. Legen Sie andernfalls diesen Parameter auf UNSPECIFIED_COMPARTMENT_IDfest.

[in] interfaceIndex

Der Index der Schnittstelle, auf der die ursprünglichen Paketdaten empfangen wurden. Ein Beschriftungstreiber sollte den Wert des Schnittstellenindex verwenden, der als einer der eingehenden Datenwerte an seine klassifizierenFn Legendenfunktion für diesen Parameter übergeben wird, wenn das Paket in dieselbe Schnittstelle eingefügt werden soll, in die das ursprüngliche Paket angegeben wurde.

[in] subInterfaceIndex

Der Index der Unterinterface, auf der die ursprünglichen Paketdaten empfangen wurden. Ein Beschriftungstreiber sollte den Wert des Unterinterface-Index verwenden, der als einer der eingehenden Datenwerte an seine klassifizierenFn Legendenfunktion für diesen Parameter übergeben wird, wenn das Paket in dieselbe Unterinterface eingefügt werden soll, in die das ursprüngliche Paket angegeben wurde.

[in, out] netBufferList

Ein Zeiger auf eine NET_BUFFER_LIST Struktur, die die injizierten Paketdaten beschreibt. Ein Popuptreiber weist eine NET_BUFFER_LIST Struktur zu, die zum Einfügen von Paketdaten verwendet werden soll, indem entweder die FwpsAllocateCloneNetBufferList0-Funktion oder die FwpsAllocateNetBufferList0--Funktion aufgerufen wird. Die NET_BUFFER_LIST-Struktur muss mit einem IP-Header beginnen.

[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.

[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 FwpsInjectTransportReceiveAsync0-Funktion gibt einen der folgenden NTSTATUS- Codes zurück.

Rückgabecode Beschreibung
STATUS_SUCCESS
Die Paketdateneinfügung wurde erfolgreich initiiert. Das Filtermodul ruft die Vervollständigungsfunktion auf, nachdem das Filtermodul das Einfügen der Paketdaten in den Netzwerkstapel abgeschlossen hat oder wenn anschließend ein Fehler aufgetreten ist. Bei einem Fehler gibt das Status Mitglied der abgeschlossenen NET_BUFFER_LIST Struktur den Grund für den Fehler an.
STATUS_FWP_TCPIP_NOT_READY
Der TCP/IP-Netzwerkstapel ist nicht bereit, die Einfügung von Paketdaten zu akzeptieren.
STATUS_FWP_INJECT_HANDLE_CLOSING
Der Einspritzpunkt wird geschlossen.
Andere Statuscodes
Fehler.

Bemerkungen

Ein Popuptreiber ruft die FwpsInjectTransportReceiveAsync0-Funktion auf, um Paketdaten aus den Transport-, Datagramm- oder ICMP-Fehlerebenen in den Empfangen-Datenpfad einzufügen. Diese Funktion kann asynchron ausgeführt werden. Beschriftungstreiber einfügen normalerweise Daten in den Netzwerkstapel, wenn Paketdaten geändert werden. Weitere Informationen dazu, wie ein Beschriftungstreiber Paketdaten ändern kann, finden Sie unter Callout Driver Operations.

Wenn ein Beschriftungstreiber ein Paket geändert hat, das mit FwpsInjectTransportReceiveAsync0eingefügt wird, sollte er die FwpsConstructIpHeaderForTransportPacket0 Funktion, um die IP- und Ip-Prüfsummen (TCP, UDP und ICMP) zu korrigieren. Der headerIncludeHeaderSize Parameter von FwpsConstructIpHeaderForTransportPacket0 sollte derselbe Wert sein wie der ipHeaderSize Member des FWPS_INCOMING_METADATA_VALUES0 Struktur, die an den inMetaValues Parameter der klassifizierenFn Legendenfunktion des Popuptreibers übergeben wird.

Wenn der Rückgabewert nicht STATUS_SUCCESSist, wird die Vervollständigungsfunktion nicht aufgerufen. In diesem Fall muss die von netBufferList verweisende Netzpufferliste durch einen Aufruf von FwpsFreeNetBufferList0 oder FwpsFreeCloneNetBufferList0.

Wenn die ursprünglich eingehenden Paketdaten der IPsec-Richtlinienerzwingung unterliegen, als sie ursprünglich von der Transportschicht verarbeitet wurde, wird das von dieser Funktion eingefügte geklonte Paket die IPsec-Überprüfung umgehen, wenn der Netzwerkstapel erneut eingespeist wird. Lokal generierte eingehende Pakete, die die FwpsAllocateNetBufferAndNetBufferList0-Funktion verwenden, umgehen auch die IPsec-Überprüfung.

Damit IPsec zuerst eingehende Pakete verarbeiten kann, muss die Legende, die die Transportschichtdaten überprüft, einen niedrigeren Wert von subLayerWeight- in der FWPS_FILTER0-Struktur aufweisen als die universelle Unterschicht. Darüber hinaus darf der Popuptreiber keine Pakete im Tunnelmodus abfangen, für die die Kombination von FWPS_PACKET_LIST_INBOUND_IPSEC_INFORMATION0 Mitglieder ( isTunnelMode && ! isDeTunneled ) wird von der FwpsGetPacketListSecurityInformation0 Funktion. Der Beschriftungstreiber muss warten, bis das Paket enttunnelt wird und dann auf der Transportebene oder auf einer Vorwärtsebene abfangen sollte.

Aufgrund der TCP-Protokollsperrsemantik kann TCP nur auf jeder Transportebene oder einer entsprechenden Ebene out of Band eingefügt werden, sodass FwpsInjectTransportReceiveAsync0 und FwpsInjectTransportSendAsync0 von einem DPC in die Warteschlange gestellt und ausgeführt werden müssen.

Diese Funktion kann von einer der folgenden Transportebenen aufgerufen werden, wenn das FWPS_METADATA_FIELD_ALE_CLASSIFY_REQUIRED-Metadatenflagge nicht festgelegt ist:

FWPS_LAYER_INBOUND_TRANSPORT_V4

FWPS_LAYER_INBOUND_TRANSPORT_V6

FWPS_LAYER_DATAGRAM_DATA_V4 (wenn die eingehende Richtung mit FWP_DIRECTION_INBOUNDangegeben wird)

FWPS_LAYER_DATAGRAM_DATA_V6 (wenn die eingehende Richtung mit FWP_DIRECTION_INBOUNDangegeben wird)

FWPS_LAYER_INBOUND_ICMP_ERROR_V4

FWPS_LAYER_INBOUND_ICMP_ERROR_V6

Andernfalls sollte diese Funktion von den folgenden ALE-Ebenen (Application Layer Enforcement) aufgerufen werden, nachdem ein pendierter ALE-Vorgang mit einem Aufruf von FwpsPendOperation0 initiiert wurde und mit einem Aufruf von FwpsCompleteOperation0abgeschlossen wurde:

FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V4

FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V6

Eine einjizierte Netzpufferliste muss an die FwpsCompleteOperation0- Funktion als netBufferList--Argument übergeben werden.

Das injizierte Paket kann dem Popuptreiber erneut angezeigt werden. Um endlose Schleifen zu verhindern, sollte der Treiber zuerst die FwpsQueryPacketInjectionState0-Funktion, bevor Sie mit einem Aufruf der klassifizierenFn Legendenfunktion fortfahren, und der Treiber sollte Paketen erlauben, die den Einfügezustand aufweisen, FWPS_PACKET_INJECTION_STATE auf FWPS_PACKET_INJECTED_BY_SELF oder FWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELF festgelegt sind, das nicht geändert wird.

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

Siehe auch

FWPS_FILTER0

FWPS_FILTER_CONDITION0

FWPS_INCOMING_METADATA_VALUES0

FWPS_PACKET_INJECTION_STATE

FWPS_PACKET_LIST_INBOUND_IPSEC_INFORMATION0 FwpsAllocateCloneNetBufferList0 FwpsAllocateNetBufferAndNetBufferList0

FwpsCompleteOperation0

FwpsFreeCloneNetBufferList0

FwpsFreeNetBufferList0

FwpsGetPacketListSecurityInformation0

FwpsInjectNetworkSendAsync0

FwpsInjectionHandleCreate0

FwpsInjectionHandleDestroy0-

FwpsPendOperation0

FwpsQueryPacketInjectionState0

NET_BUFFER_LIST

klassifizierenFn-

completionFn-