Freigeben über


FwpsInjectTransportSendAsync0-Funktion (fwpsk.h)

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

HinweisFwpsInjectTransportSendAsync0 ist die spezifische Version von FwpsInjectTransportSendAsync in Windows Vista und höher verwendet. Weitere Informationen finden Sie unter WFP-Version-Independent Namen und zielspezifische Versionen von Windows. Für Windows 7 ist FwpsInjectTransportSendAsync1 verfügbar.
 

Syntax

NTSTATUS FwpsInjectTransportSendAsync0(
  [in]           HANDLE                      injectionHandle,
  [in, optional] HANDLE                      injectionContext,
  [in]           UINT64                      endpointHandle,
  [in]           UINT32                      flags,
  [in, optional] FWPS_TRANSPORT_SEND_PARAMS0 *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 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.

[in] endpointHandle

Ein Handle, das den Stapeltransportendpunkt im Sendedatenpfad angibt, in den das Paket eingefügt werden soll. Dieses Endpunkthandle wird einem Popup über das transportEndpointHandle- Mitglied des FWPS_INCOMING_METADATA_VALUES0 Struktur, die an die klassifizierenFn Legendenfunktion 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 dem Stapelendpunkt zugeordnete Socket geschlossen wird und der Handle nicht mehr gültig wird.

[in] flags

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

[in, optional] sendArgs

Ein Zeiger auf ein FWPS_TRANSPORT_SEND_PARAMS0 Struktur, die die Eigenschaften des aktuellen ausgehenden Pakets angibt. Kann nur NULL- sein, wenn die zu injizierende Netzpufferliste einen IP-Header enthält (z. B. wenn das Paket über einen unformatierten 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, 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_ID fest.

[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 kann, indem entweder die FwpsAllocateCloneNetBufferList0 Funktion oder die FwpsAllocateNetBufferAndNetBufferList0 Funktion.

[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 Beschriftungstreiber 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 FwpsInjectNetworkSendAsync0-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 FwpsInjectNetworkSendAsync0-Funktion auf, um Paketdaten aus den Transport-, Datagramm- oder ICMP-Fehlerebenen in den Sendedatenpfad einzufügen. Auf diesen Ebenen wird 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 Netpufferliste, auf die von netBufferList verwiesen wird, durch einen Aufruf von FwpsFreeNetBufferList0 oder FwpsFreeCloneNetBufferList0freigegeben werden.

Beschriftungstreiber einfügen normalerweise Daten in den Netzwerkstapel, wenn sie Paketdaten ändern. Weitere Informationen dazu, wie ein Beschriftungstreiber Paketdaten ändern kann, finden Sie unter Callout Driver Operations.

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.

Das injizierte Paket kann dem Popuptreiber erneut angezeigt werden. Um endlose Schleifen zu verhindern, sollte der Treiber zuerst die funktion FwpsQueryPacketInjectionState0 aufrufen, bevor die klassifizierenFn Legendenfunktion aufgerufen wird, und Pakete zulassen, die den Einfügungsstatus aufweisen, FWPS_PACKET_INJECTION_STATE auf FWPS_PACKET_INJECTED_BY_SELF oder FWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELFfestgelegt sind.

Der endpointHandle--Parameter sowie mitglieder, die im FWPS_TRANSPORT_SEND_PARAMS0 Struktur, auf die durch den sendArgs Parameter verwiesen wird, werden Popups aus den folgenden Netzwerkebenen bereitgestellt:

FWPS_LAYER_OUTBOUND_TRANSPORT_V4
FWPS_LAYER_OUTBOUND_TRANSPORT_V6
FWPS_LAYER_DATAGRAM_DATA_V4 (wenn die ausgehende Richtung mit FWP_DIRECTION_OUTBOUND angegeben wird)
FWPS_LAYER_DATAGRAM_DATA_V6 (wenn die 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 beide der folgenden Werte zutreffen:

Wenn das Datagramm zu einem unformatierten Socket gehört, muss die NetBufferList-Liste auf die von netBufferList verwiesen wird, an den Start am IP-Header angepasst werden (die der Netzpufferliste vorangestellt werden muss):

  • FWPS_LAYER_DATAGRAM_DATA_V4 (wenn die ausgehende Richtung mit FWP_DIRECTION_OUTBOUND angegeben wird)
  • FWPS_LAYER_DATAGRAM_DATA_V6 (wenn die ausgehende Richtung mit FWP_DIRECTION_OUTBOUND angegeben 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_INCOMING_METADATA_VALUES0

FWPS_PACKET_INJECTION_STATE

FWPS_TRANSPORT_SEND_PARAMS0

FwpsAllocateCloneNetBufferList0 FwpsAllocateNetBufferAndNetBufferList0

FwpsFreeCloneNetBufferList0

FwpsFreeNetBufferList0

FwpsInjectTransportSendAsync1

FwpsInjectionHandleCreate0

FwpsInjectionHandleDestroy0-

FwpsQueryPacketInjectionState0

NET_BUFFER_LIST

klassifizierenFn-

completionFn-