Fonction FwpsInjectForwardAsync0 (fwpsk.h)
La fonction FwpsInjectForwardAsync0 injecte des données de paquet dans le chemin des données de transfert.
Syntaxe
NTSTATUS FwpsInjectForwardAsync0(
[in] HANDLE injectionHandle,
[in, optional] HANDLE injectionContext,
[in] UINT32 flags,
[in] ADDRESS_FAMILY addressFamily,
[in] COMPARTMENT_ID compartmentId,
[in] IF_INDEX interfaceIndex,
[in, out] NET_BUFFER_LIST *netBufferList,
[in] FWPS_INJECT_COMPLETE0 completionFn,
[in, optional] HANDLE completionContext
);
Paramètres
[in] injectionHandle
Un handle d’injection qui a été créé précédemment par un appel à Fonction FwpsInjectionHandleCreate0 .
[in, optional] injectionContext
Handle facultatif pour le contexte d’injection. S’il est spécifié, il peut être obtenu en appelant le Fonction FwpsQueryPacketInjectionState0 lorsque l’état d’injection de paquets FWPS_PACKET_INJECTION_STATE est FWPS_PACKET_INJECTED_BY_SELF ou FWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELF.
[in] flags
Réservé. Les pilotes de légende doivent définir ce paramètre sur zéro.
[in] addressFamily
L’une des familles d’adresses suivantes :
AF_INET
Famille d’adresses IPv4.
AF_INET6
Famille d’adresses IPv6.
[in] compartmentId
Identificateur du compartiment de routage dans lequel les données de paquet sont injectées, spécifié en tant que type COMPARTMENT_ID . Cet identificateur est fourni à une légende via le membre compartmentId du FWPS_INCOMING_METADATA_VALUES0 structure passée à la fonction de légende classFn du pilote de légende. Si le membre compartmentId est disponible pour les légendes, FWPS_METADATA_FIELD_COMPARTMENT_ID sera défini dans le membre currentMetadataValues . Sinon, définissez ce paramètre sur UNSPECIFIED_COMPARTMENT_ID.
[in] interfaceIndex
Index de l’interface de destination (sur lequel les données de paquet doivent être envoyées). L’index est une valeur 32 bits. Un pilote de légende doit utiliser la valeur de l’index d’interface qui est passé comme l’une des valeurs de données entrantes à sa fonction de légende classifyFn pour ce paramètre si le paquet doit être injecté dans la même interface où le paquet d’origine a été indiqué.
[in, out] netBufferList
Pointeur vers une structure de NET_BUFFER_LIST qui décrit les données de paquet injectées. Un pilote de légende alloue une structure de NET_BUFFER_LIST pour injecter des données de paquets en appelant l’un ou l’autre Fonction FwpsAllocateCloneNetBufferList0 ou Fonction FwpsAllocateNetBufferAndNetBufferList0 . La structure NET_BUFFER_LIST doit commencer par un en-tête IP.
[in] completionFn
Pointeur vers une fonction de légende completionFn fournie par le pilote de légende. Le moteur de filtre appelle cette fonction après que les données de paquet, décrites par le paramètre netBufferList , ont été injectées dans la pile réseau.
[in, optional] completionContext
Pointeur vers un contexte fourni par un pilote de légende qui est passé à la fonction de légende pointée par le paramètre completionFn . Ce paramètre est facultatif et peut être NULL.
Valeur retournée
La fonction FwpsInjectForwardAsync0 retourne l’un des codes NTSTATUS suivants.
Code de retour | Description |
---|---|
|
L’injection de données de paquets a été lancée avec succès. Le moteur de filtre appelle la fonction d’achèvement une fois que le moteur de filtre a terminé d’injecter les données de paquets dans la pile réseau, ou lorsqu’une erreur s’est produite par la suite, auquel cas le membre Status de la structure de NET_BUFFER_LIST terminée indique la raison de l’échec. |
|
La pile réseau TCP/IP n’est pas prête à accepter l’injection de données de paquets. |
|
La poignée d’injection est en cours de fermeture. |
|
Une erreur est survenue. |
Remarques
Un pilote de légende appelle la fonction FwpsInjectForwardAsync0 pour injecter des données de paquet ou un fragment de paquet dans le chemin des données de transfert.
Cette fonction peut s’exécuter de manière asynchrone. Les pilotes de légende injectent normalement des données dans la pile réseau lors de la modification des données de paquets. Pour plus d’informations sur la façon dont un pilote de légende peut modifier les données de paquets, consultez Opérations du pilote de légende.
Un paquet ou un fragment de paquet injecté avec cette fonction ne sera indiqué à aucune couche PAM pour le filtrage.
Si la valeur de retour n’est pas STATUS_SUCCESS, la fonction d’achèvement n’est pas appelée. Dans ce cas, la liste de mémoires tampons net pointée par netBufferList doit être libérée par un appel à FwpsFreeNetBufferList0 ou FwpsFreeCloneNetBufferList0.
Les paquets ou fragments IP peuvent être clonés, modifiés et réinjectés dans la pile réseau. Toutefois, un groupe de fragments doit être remonté par le pilote de légende en tant qu’NET_BUFFER_LIST unique avant de pouvoir être réinjecté.
Les paquets injectés vers l’avant n’entrent pas à nouveau dans la couche de transfert. Par conséquent, ils ne seront pas reclassifiés.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Disponible à partir de Windows Vista. |
Plateforme cible | Universal |
En-tête | fwpsk.h (inclure Fwpsk.h) |
Bibliothèque | Fwpkclnt.lib |
IRQL | <= DISPATCH_LEVEL |