FwpsInjectNetworkSendAsync0, fonction (fwpsk.h)
La fonction FwpsInjectNetworkSendAsync0 injecte des données de paquets dans le chemin d’envoi des données.
Syntaxe
NTSTATUS FwpsInjectNetworkSendAsync0(
[in] HANDLE injectionHandle,
[in, optional] HANDLE injectionContext,
[in] UINT32 flags,
[in] COMPARTMENT_ID compartmentId,
[in, out] NET_BUFFER_LIST *netBufferList,
[in] FWPS_INJECT_COMPLETE0 completionFn,
[in, optional] HANDLE completionContext
);
Paramètres
[in] injectionHandle
Handle d’injection créé précédemment par un appel à la fonction FwpsInjectionHandleCreate0 avec les indicateurs de défini sur FWPS_INJECTION_TYPE_NETWORK.
[in, optional] injectionContext
Handle facultatif dans le contexte d’injection. Si elle est spécifiée, elle peut être obtenue en appelant la fonction FwpsQueryPacketInjectionState 0 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] compartmentId
Identificateur du compartiment de routage dans lequel les données de paquets sont injectées, spécifiée en tant que type COMPARTMENT_ID. Cet identificateur est fourni à une légende par le biais du compartimentId membre du FWPS_INCOMING_METADATA_VALUES0 structure passée à la fonction de légende classifierFn fonction de légende du pilote de légende. Si le compartimentId membre est disponible pour les légendes, FWPS_METADATA_FIELD_COMPARTMENT_ID est défini dans le membre currentMetadataValues. Sinon, définissez ce paramètre sur UNSPECIFIED_COMPARTMENT_ID.
[in, out] netBufferList
Pointeur vers une structure NET_BUFFER_LIST qui décrit les données de paquet en cours d’injection. Un pilote de légende alloue une structure NET_BUFFER_LIST à utiliser pour injecter des données de paquets en appelant la fonction FwpsAllocateCloneNetBufferList0 ou la fonction FwpsAllocateNetBufferAndNetBufferList0. La structure NET_BUFFER_LIST doit commencer par un en-tête IP.
[in] completionFn
Pointeur vers un completionFn fonction de légende fournie par le pilote de légende. Le moteur de filtre appelle cette fonction après les données de paquets, décrites par le paramètre NetBufferList, a été injectée dans la pile réseau.
[in, optional] completionContext
Pointeur vers un contexte fourni par le pilote de légende passé à la fonction de légende pointée par le paramètre completionFn. Ce paramètre est facultatif et peut être NULL.
Valeur de retour
La fonction FwpsInjectNetworkSendAsync0 retourne l’un des codes NTSTATUS suivants.
Retourner le code | Description |
---|---|
|
L’injection de données de paquet 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. En cas d’erreur, l’état membre de la structure 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 fermée. |
|
Le handle d’injection n’a pas été créé avec le paramètre Flags du fonction FwpsInjectionHandleCreate0 définie sur FWPS_INJECTION_TYPE_NETWORK. |
|
Une erreur s’est produite. |
Remarques
Un pilote de légende appelle la fonction FwpsInjectNetworkSendAsync0 pour injecter des données de paquets réseau dans le chemin d’envoi des données. Cette fonction peut s’exécuter de façon 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.
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 nettes pointée par netBufferList doit être libérée par un appel au FwpsFreeNetBufferList0 ou fonctions FwpsFreeCloneNetBufferList0.
Le paquet injecté peut être à nouveau indiqué au pilote de légende. Pour éviter une boucle infinie, le pilote doit d’abord appeler le fonction FwpsQueryPacketInjectionState0 avant de passer un appel à la fonction de légende classifierFn, et le pilote doit autoriser les paquets qui ont l’état d’injection FWPS_PACKET_INJECTION_STATE défini sur FWPS_PACKET_INJECTED_BY_SELF ou FWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELF.
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Disponible à partir de Windows Vista. |
plateforme cible | Universel |
d’en-tête | fwpsk.h (include Fwpsk.h) |
bibliothèque | Fwpkclnt.lib |
IRQL | <= DISPATCH_LEVEL |