Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ein Callout-Treiber kann die folgenden WFP-Funktionen aufrufen, um pendierte oder geänderte Paketdaten in den TCP/IP-Stapel einzufügen. Die anwendbaren Ebenen, aus denen Daten zusammen mit möglichen Zielen eingefügt werden können, sind in der folgenden Tabelle aufgeführt.
| Injection function | Applicable layer | Destination |
|---|---|---|
network layer |
der Weiterleitungsdatenpfad |
|
network layer |
den Empfangsdatenpfad |
|
network layer |
Der Pfad zum Senden von Daten |
|
Paketdaten aus den Transport-, Datagrammdaten-, ICMP-Fehler- oder ALE-Schichten |
den Empfangsdatenpfad |
|
Paketdaten aus den Transport-, Datagrammdaten-, ICMP-Fehler- oder ALE-Schichten |
Der Pfad zum Senden von Daten |
|
TCP-Datensegmente |
Datenstrom |
In addition, the FwpsQueryPacketInjectionState0 function is used to inspect the injection history of packet data.
Cross-Layer Injection ist aktiviert, wenn das Callout alle erforderlichen Informationen bereitstellen kann, die von der Injektionsfunktion benötigt werden, und die Net-Puffer-Liste das von der Injektionsfunktion erwartete Format aufweist. For example, a callout can capture a packet at the forward path, modify its destination address to that of the local computer, and call FwpsInjectTransportReceiveAsync0 to redirect the packet into the local computer's TCP/IP stack.
Mit Ausnahme der Streameinfügung (TCP-Daten) werden eingefügte eingehende Pakete von der "unteren" Seite des Stapels und der WFP-Schichten wieder eingefügt, während die eingefügten ausgehenden Pakete von der "oberen" Seite des Stapels und der WFP-Schichten wieder eingefügt werden. Ein UDP-Paket, das aus der eingehenden Datagrammdatenebene eingefügt wird, tritt beispielsweise erneut in den Stapel ein und durchquert die Netzwerkschicht, die Transportschicht, die optionalen ALE-Empfangs- oder -Akzeptierschichten und kehrt dann wieder zur Datagrammdatenebene zurück. Ein weiteres UDP-Paket, das von der ausgehenden Netzwerkebene eingefügt wird, tritt erneut in den Stapel ein und durchläuft die ALE- (optional), Datagrammdaten- und Transportschicht und kehrt zur Netzwerkschicht zurück.
FwpsInjectTransportReceiveAsync0 automatically bypasses IPsec processing for the reinjected packet because it had previously gone through IPsec verification.
Ein Paket, das von einem WFP-Callout-Treiber injiziert wird, wird dem Callout erneut zugeordnet, außer in den Fällen, in denen Änderungen an dem Paket dazu führen, dass es nicht mehr den ursprünglichen Filterbedingungen entspricht. WFP provides the FwpsQueryPacketInjectionState0 function for callouts to query whether the packet was injected (or injected earlier) by the callout. Um endlose Schleifen zu verhindern, sollten Callouts selbsteingefügte Pakete zulassen.
Callouts müssen die IP- oder Transportschicht-Prüfsumme, oder beides, anpassen, nachdem sie ein IP-Paket geändert haben. Ein Callout kann die Prüfsumme auf 0 für UDP über IPv4-Pakete festlegen. Um mit der Auslagerung der Transportschicht-Prüfsumme kompatibel zu sein und die Berechnungen der vollständigen Prüfsumme im Vergleich zur Pseudoprüfsumme entsprechend anzupassen, kann ein Callout die folgende Logik verwenden:
NDIS_TCP_IP_CHECKSUM_PACKET_INFO ChecksumInfo;
ChecksumInfo.Value =
(ULONG) (ULONG_PTR)NET_BUFFER_LIST_INFO(
NetBufferList,TcpIpChecksumNetBufferListInfo);
If ChecksumInfo.Transmit.NdisPacketTcpChecksum is TRUE, the TCP send operation will be offloaded. If ChecksumInfo.Transmit.NdisPacketUdpChecksum is TRUE, the UDP send operation will be offloaded.
Wenn in Windows Vista mit Service Pack 1 (SP1) und Windows Server 2008 inMetaValues->headerIncludeHeaderLength größer als 0 ist, handelt es sich bei dem ausgehenden Paket um eine RAW-Sende-Wiedereinfügung, die einen IP-Header enthält. Zum Ausführen von RAW-Sende-Wiedereinfügungen, die einen IP-Header für Windows Vista mit SP1 und Windows Server 2008 enthalten, müssen Sie das geklonte Paket um den Betrag in inMetaValues->headerIncludeHeaderLength zurückziehen und inMetaValues->headerIncludeHeader über den neu erweiterten Bereich kopieren. Then, use FwpsInjectTransportSendAsync0 with the net buffer list for the packet and leave the FWPS_TRANSPORT_SEND_PARAMS0 parameter set to NULL. Weitere Informationen zu Operationen zum Zurückgehen bei Netzpufferlisten finden Sie unter Vorgänge zum Zurück- und Vorgehen.
Note For raw send operations, the net buffer list must contain only a single net buffer. Wenn Ihre Nettopufferliste mehr als einen Nettopuffer enthält, müssen Sie die Nettopufferliste in eine Abfolge von Nettopufferlisten konvertieren, und jede in der Abfolge muss einen einzelnen Nettopuffer enthalten. For more information about net buffer list management, see NET_BUFFER Architecture.