Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
En drivrutin kan anropa följande WFP-funktioner för att mata in fördröjda eller modifierade paketdata i TCP/IP-stacken. De tillämpliga lager som data kan matas in från, tillsammans med möjliga mål, visas i följande tabell.
| Injection function | Applicable layer | Destination |
|---|---|---|
network layer |
datasökvägen för vidarebefordran |
|
network layer |
sökvägen för att ta emot data |
|
network layer |
sökvägen för att skicka data |
|
paketdata från transporten, datagramdata, ICMP-fel eller ALE-lager |
sökvägen för att ta emot data |
|
paketdata från transporten, datagramdata, ICMP-fel eller ALE-lager |
sökvägen för att skicka data |
|
TCP-datasegment |
en dataström |
In addition, the FwpsQueryPacketInjectionState0 function is used to inspect the injection history of packet data.
Tvärskiktsinjektion aktiveras om callouten kan ange all nödvändig information som krävs av injektionsfunktionen, och nätbuffertlistan har det format som förväntas av injektionsfunktionen. 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.
Förutom ströminmatningen (TCP-data) matas inkommande paket in igen från "botten" av stack- och WFP-lagren, medan utgående paket matas in igen från "toppen" av stack- och WFP-lagren. Till exempel kommer ett UDP-paket som matas in från det inkommande datagramdataskiktet att återvända till stacken och passera genom nätverksskiktet, transportskiktet, ALE-mottagnings- eller accepteringsskiktet (valfritt), och tillbaka till datagramdataskiktet. Ett annat UDP-paket som injiceras från det utgående nätverksskiktet återkommer till stacken och passerar (valfritt) ALE, datagramdataskiktet, transportlagret och återvänder till nätverksskiktet.
FwpsInjectTransportReceiveAsync0 automatically bypasses IPsec processing for the reinjected packet because it had previously gone through IPsec verification.
Ett paket som matas in av en WFP-calloutdrivrutin kommer att indikeras på nytt till callouten, förutom i de fall då ändringar i paketet gör att det missar de ursprungliga filtreringsvillkoren. WFP provides the FwpsQueryPacketInjectionState0 function for callouts to query whether the packet was injected (or injected earlier) by the callout. För att förhindra oändlig loopning bör anföranden tillåta självinsprutade paket.
Anrop måste justera kontrollsumman för IP- eller transportskiktet, eller båda, efter att det har ändrat ett IP-paket. Ett anrop kan ställa in kontrollsumman till 0 för UDP över IPv4-paket. För att vara kompatibel med kontrollsummeavlastning för transportlager och för att justera fullständiga checksummor mot pseudochecksummaberäkningar på så sätt, kan ett funktionsanrop använda följande logik:
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.
I Windows Vista med Service Pack 1 (SP1) och Windows Server 2008, om inMetaValues–>headerIncludeHeaderLength är större än 0, är det utgående paketet en RAW-skicka-reinjection som innehåller en IP-rubrik. Om du vill utföra RAW-återsändningar som inkluderar en IP-rubrik för Windows Vista med SP1 och Windows Server 2008 måste du justera det klonade paketet med beloppet i inMetaValues->headerIncludeHeaderLength och kopiera inMetaValues->headerIncludeHeader över det nyligen utökade utrymmet. Then, use FwpsInjectTransportSendAsync0 with the net buffer list for the packet and leave the FWPS_TRANSPORT_SEND_PARAMS0 parameter set to NULL. Mer information om retreatåtgärder för net buffer-listor finns i Retreat and Advance Operations.
Note For raw send operations, the net buffer list must contain only a single net buffer. Om din nettobuffertlista innehåller mer än en nettobuffert måste du konvertera din netbuffertlista till en serie med netbuffertlistor, och var och en i serien måste innehålla en enda nettobuffert. For more information about net buffer list management, see NET_BUFFER Architecture.