FwpsInjectTransportSendAsync0-Funktion (fwpsk.h)

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

HinweisFwpsInjectTransportSendAsync0 ist die spezifische Version von FwpsInjectTransportSendAsync , die in Windows Vista und höher verwendet wird. Weitere Informationen finden Sie unter WFP-Version-Independent Namen und Spezifische Windows-Versionen . 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 Einschleusungshandle, das zuvor durch einen Aufruf von erstellt wurde FwpsInjectionHandleCreate0-Funktion .

[in, optional] injectionContext

Ein optionales Handle für den Einschleusungskontext. Wenn angegeben, kann sie durch Aufrufen der FwpsQueryPacketInjectionState0-Funktion abgerufen werden, wenn der FWPS_PACKET_INJECTION_STATE Zustand der Paketeinschleusung FWPS_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 für eine Legende über das element transportEndpointHandle des -Elements bereitgestellt. 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 ist.

[in] flags

Reserviert. Legendentreiber müssen diesen Parameter auf 0 (null) festlegen.

[in, optional] sendArgs

Ein Zeiger auf eine FWPS_TRANSPORT_SEND_PARAMS0 Struktur, die die Eigenschaften des aktuellen ausgehenden Pakets angibt. Kann nur NULL sein, wenn die zu einfügende Netzwerkpufferliste 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, wird als COMPARTMENT_ID Typ angegeben. Dieser Bezeichner wird für eine Legende über das compartmentId-Element des FWPS_INCOMING_METADATA_VALUES0 Struktur, die an die Legendenfunktion "klassifizierenFn " des Legendentreibers übergeben wird. Wenn das element compartmentId 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 ordnet eine NET_BUFFER_LIST-Struktur zu, die zum Einfügen von Paketdaten verwendet werden soll, indem entweder die FwpsAllocateCloneNetBufferList0-Funktion oder die FwpsAllocateNetBufferAndNetBufferList0-Funktion .

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

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

Rückgabecode Beschreibung
STATUS_SUCCESS
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 anschließend ein Fehler aufgetreten ist. Im Falle eines Fehlers gibt der Status-Member 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 Einschleusung von Paketdaten zu akzeptieren.
STATUS_FWP_INJECT_HANDLE_CLOSING
Der Injektionshandle wird geschlossen.
Andere status Codes
Ein Fehler ist aufgetreten.

Hinweise

Ein Legendentreiber ruft die FwpsInjectNetworkSendAsync0-Funktion 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 netBufferList-Liste, auf die von netBufferList verwiesen wird, durch einen Aufruf von FwpsFreeNetBufferList0 oder FwpsFreeCloneNetBufferList0 freigegeben werden.

Legendentreiber injizieren normalerweise Daten in den Netzwerkstapel, wenn sie Paketdaten ändern. Weitere Informationen dazu, wie ein Legendentreiber Paketdaten ändern kann, finden Sie unter Aufruftreibervorgänge.

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

Das eingefügte Paket kann dem Legendentreiber erneut angezeigt werden. Um endlose Schleifen zu verhindern, sollte der Treiber zuerst die FwpsQueryPacketInjectionState0-Funktion aufrufen, bevor die Calloutfunktion klassifizierenFn aufgerufen wird, und Pakete zulassen, deren Einschleusungszustand auf FWPS_PACKET_INJECTED_BY_SELF oder FWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELF festgelegt FWPS_PACKET_INJECTION_STATE.

Der endpointHandle-Parameter sowie Member, die im FWPS_TRANSPORT_SEND_PARAMS0 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 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 Punkte zutreffen:

Wenn das Datagramm auf den folgenden Netzwerkebenen zu einem Rohsocket gehört, muss die netBufferList-Liste angepasst werden, auf die von netBufferList verwiesen wird, um am IP-Header zu beginnen (der der Netzwerkpufferliste 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
Unterstützte Mindestversion (Client) Verfügbar ab Windows Vista.
Zielplattform Universell
Header fwpsk.h (include Fwpsk.h)
Bibliothek Fwpkclnt.lib
IRQL <= DISPATCH_LEVEL

Weitere Informationen

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