Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Un pilote de légende peut appeler les fonctions PAM suivantes pour injecter des données de paquet pendées ou modifiées dans la pile TCP/IP. Les couches applicables à partir desquelles les données peuvent être injectées, ainsi que les destinations possibles, sont répertoriées dans le tableau suivant.
| Injection function | Applicable layer | Destination |
|---|---|---|
network layer |
chemin d’accès aux données de transfert |
|
network layer |
chemin d’accès aux données de réception |
|
network layer |
chemin d’accès aux données d’envoi |
|
données de paquet à partir du transport, des données de datagramme, d’erreur ICMP ou des couches ALE |
chemin d’accès aux données de réception |
|
données de paquet à partir du transport, des données de datagramme, d’erreur ICMP ou des couches ALE |
chemin d’accès aux données d’envoi |
|
Segments de données TCP |
un flux de données |
In addition, the FwpsQueryPacketInjectionState0 function is used to inspect the injection history of packet data.
L’injection intercouche est activée si la légende peut fournir toutes les informations nécessaires requises par la fonction d’injection et que la liste de mémoires tampons nettes a le format attendu par la fonction d’injection. 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.
À l’exception de l’injection de flux (données TCP), les paquets entrants injectés reentent à partir du « bas » de la pile et des couches PAM, tandis que les paquets sortants injectés reentent à partir du « haut » de la pile et des couches PAM. Par exemple, un paquet UDP injecté à partir de la couche de données du datagramme entrant reentreent la pile et traverse la couche réseau, la couche de transport, l’ALE reçoit ou accepte la couche (facultatif) et revient dans la couche de données datagramme. Un autre paquet UDP injecté à partir de la couche réseau sortante reentreent la pile et traverse l’ALE (facultatif), les données de datagramme et les couches de transport, puis revenent à la couche réseau.
FwpsInjectTransportReceiveAsync0 automatically bypasses IPsec processing for the reinjected packet because it had previously gone through IPsec verification.
Un paquet injecté par un pilote de légende PAM est réinscrit à la légende, sauf dans les cas où la modification du paquet entraîne l’absence des conditions de filtre d’origine. WFP provides the FwpsQueryPacketInjectionState0 function for callouts to query whether the packet was injected (or injected earlier) by the callout. Pour éviter une boucle infinie, les légendes doivent autoriser les paquets auto-injectés.
Les légendes doivent ajuster la somme de contrôle de la couche IP ou de transport, ou les deux, après avoir modifié un paquet IP. Une légende peut définir la somme de contrôle sur 0 pour les paquets UDP sur IPv4. Pour être compatible avec le déchargement de somme de contrôle de la couche de transport et pour ajuster la somme de contrôle complète par rapport aux calculs pseudo-somme de contrôle en conséquence, une légende peut utiliser la logique suivante :
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.
Dans Windows Vista avec Service Pack 1 (SP1) et Windows Server 2008, si inMetaValues-headerIncludeHeaderLength> est supérieur à 0, le paquet sortant est une réinjection d’envoi RAW qui inclut un en-tête IP. Pour effectuer des réinjections d’envoi RAW qui incluent un en-tête IP pour Windows Vista avec SP1 et Windows Server 2008, vous devez retirer le paquet cloné par la quantité dans inMetaValues-headerIncludeHeaderLength> et copier l’inMetaValues-headerIncludeHeader> sur l’espace nouvellement étendu. Then, use FwpsInjectTransportSendAsync0 with the net buffer list for the packet and leave the FWPS_TRANSPORT_SEND_PARAMS0 parameter set to NULL. Pour plus d’informations sur les opérations de retraite pour les listes de mémoires tampons nettes, consultez Retrait et opérations avancées.
Note For raw send operations, the net buffer list must contain only a single net buffer. Si votre liste de mémoires tampons nettes contient plusieurs mémoires tampons nettes, vous devez convertir votre liste de mémoires tampons nettes en une série de listes de mémoires tampons nettes, et chacune de ces listes doit contenir une seule mémoire tampon nette. For more information about net buffer list management, see NET_BUFFER Architecture.