code de contrôle SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT
Description
Le code de contrôle SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT récupère le contexte de redirection d’un enregistrement de redirection utilisé par un service de redirection de la plateforme de filtrage Windows (PAM).
Pour effectuer cette opération, appelez la fonction WSAIoctl ou WSPIoctl avec les paramètres suivants.
(socket) s, // descriptor identifying a socket
SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT, // dwIoControlCode
NULL, // lpvInBuffer
0, // cbInBuffer
(LPVOID) lpvOutBuffer, // output buffer
(DWORD) cbOutBuffer, // size of output buffer
(LPDWORD) lpcbBytesReturned, // number of bytes returned
(LPWSAOVERLAPPED) lpOverlapped, // OVERLAPPED structure
(LPWSAOVERLAPPED_COMPLETION_ROUTINE) lpCompletionRoutine, // completion routine
);
int WSPIoctl(
(socket) s, // descriptor identifying a socket
SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT, // dwIoControlCode
NULL, // lpvInBuffer
0, // cbInBuffer
(LPVOID) lpvOutBuffer, // output buffer
(DWORD) cbOutBuffer, // size of output buffer
(LPDWORD) lpcbBytesReturned, // number of bytes returned
(LPWSAOVERLAPPED) lpOverlapped, // OVERLAPPED structure
(LPWSAOVERLAPPED_COMPLETION_ROUTINE) lpCompletionRoutine, // completion routine
(LPWSATHREADID) lpThreadId, // a WSATHREADID structure
(LPINT) lpErrno // a pointer to the error code.
);
Paramètres
s
Descripteur identifiant un socket.
dwIoControlCode
Code de contrôle pour l’opération. Utilisez SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT pour cette opération.
lpvInBuffer
Pointeur vers la mémoire tampon d’entrée. Ce paramètre n’est pas utilisé pour cette opération.
cbInBuffer
Taille, en octets, de la mémoire tampon d’entrée. Ce paramètre n’est pas utilisé pour cette opération.
lpvOutBuffer
Pointeur vers la mémoire tampon de sortie. Ce paramètre doit pointer vers un type de données ULONG si les paramètres lpOverlapped et lpCompletionRoutine ont la valeur NULL.
cbOutBuffer
Taille, en octets, de la mémoire tampon de sortie. Ce paramètre doit avoir au moins la taille d’un type de données ULONG .
lpcbBytesReturned
Pointeur vers une variable qui reçoit la taille, en octets, des données stockées dans la mémoire tampon de sortie.
Si la mémoire tampon de sortie est trop petite, l’appel échoue, WSAGetLastError renvoie WSAEINVAL et le paramètre lpcbBytesReturned pointe vers une valeur DWORD de zéro.
Si lpOverlapped a la valeur NULL, la valeur DWORD pointée par le paramètre lpcbBytesReturned retourné lors d’un appel réussi ne peut pas être égale à zéro.
Si le paramètre lpOverlapped n’est pas NULL pour les sockets superposés, les opérations qui ne peuvent pas être effectuées immédiatement sont lancées et l’achèvement sera indiqué ultérieurement. La valeur DWORD pointée par le paramètre lpcbBytesReturned retourné peut être égale à zéro, car la taille des données stockées ne peut pas être déterminée tant que l’opération superposée n’est pas terminée. La status d’achèvement finale peut être récupérée lorsque la méthode d’achèvement appropriée est signalée lorsque l’opération est terminée.
lpvOverlapped
Pointeur vers une structure WSAOVERLAPPED .
Si le socket s a été créé sans l’attribut superposé, le paramètre lpOverlapped est ignoré.
Si s a été ouvert avec l’attribut qui se chevauche et que le paramètre lpOverlapped n’a pas la valeur NULL, l’opération est effectuée en tant qu’opération (asynchrone) qui se chevauche. Dans ce cas, le paramètre lpOverlapped doit pointer vers une structure WSAOVERLAPPED valide.
Pour les opérations qui se chevauchent, la fonction WSAIoctl ou WSPIoctl retourne immédiatement, et la méthode d’achèvement appropriée est signalée une fois l’opération terminée. Sinon, la fonction ne retourne pas tant que l’opération n’est pas terminée ou qu’une erreur se produit.
lpCompletionRoutine
Type : _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE
Pointeur vers la routine d’achèvement appelée une fois l’opération terminée (ignorée pour les sockets qui ne se chevauchent pas).
lpThreadId
Pointeur vers une structure WSATHREADID à utiliser par le fournisseur dans un appel ultérieur à WPUQueueApc. Le fournisseur doit stocker la structure WSATHREADID référencée (pas le pointeur vers le même) jusqu’à ce que la fonction WPUQueueApc soit retournée.
Note Ce paramètre s’applique uniquement à la fonction WSPIoctl .
lpErrno
Pointeur vers le code d’erreur.
Note Ce paramètre s’applique uniquement à la fonction WSPIoctl .
Valeur retournée
Si l’opération se termine correctement, la fonction WSAIoctl ou WSPIoctl retourne zéro.
Si l’opération échoue ou est en attente, la fonction WSAIoctl ou WSPIoctl retourne SOCKET_ERROR. Pour obtenir des informations d’erreur étendues, appelez WSAGetLastError.
Code d'erreur | Signification |
---|---|
WSA_IO_PENDING | Une opération superposée a été lancée avec succès et l’achèvement sera indiqué ultérieurement. |
WSA_OPERATION_ABORTED | Une opération qui se chevauche a été annulée en raison de la fermeture du socket ou de l’exécution de la commande IOCTL SIO_FLUSH. |
WSAEFAULT | Le paramètre lpvOutBuffer, lpcbBytesReturned, lpOverlapped ou lpCompletionRoutine n’est pas totalement contenu dans une partie valide de l’espace d’adressage utilisateur. |
WSAEINPROGRESS | La fonction est appelée lorsqu’un rappel est en cours. |
WSAEINTR | Une opération de blocage a été interrompue. |
WSAEINVAL | Le paramètre dwIoControlCode n’est pas une commande valide, ou un paramètre d’entrée spécifié n’est pas acceptable, ou la commande n’est pas applicable au type de socket spécifié. Cette erreur est retournée si le paramètre cbOutBuffer est inférieur à la taille d’un type de données ULONG . |
WSAENETDOWN | Le sous-système réseau a échoué. |
WSAENOPROTOOPT | L’option socket n’est pas prise en charge sur le protocole spécifié. |
WSAENOTCONN | Le socket n’est pas connecté. |
WSAENOTSOCK | Le descripteur s n’est pas un socket. |
WSAEOPNOTSUPP | La commande IOCTL spécifiée n’est pas prise en charge. Cette erreur est retournée si le SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT IOCTL n’est pas pris en charge par le fournisseur de transport. |
Notes
La SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT IOCTL est prise en charge sur Windows 8, Windows Server 2012 et versions ultérieures du système d’exploitation.
PAM autorise l’accès au chemin de traitement des paquets TCP/IP, dans lequel les paquets sortants et entrants peuvent être examinés ou modifiés avant de leur permettre d’être traités plus en détail. En tirant parti du chemin de traitement TCP/IP, les éditeurs de logiciels indépendants peuvent plus facilement créer des pare-feu, des logiciels antivirus, des logiciels de diagnostic et d’autres types d’applications et de services. PAM fournit des composants en mode utilisateur et en mode noyau afin que les éditeurs de logiciels indépendants tiers puissent participer aux décisions de filtrage qui se produisent sur plusieurs couches de la pile de protocoles TCP/IP et dans tout le système d’exploitation. La fonctionnalité de redirection de connexion PAM permet à un pilote de noyau de légende PAM de rediriger une connexion localement vers un processus en mode utilisateur, d’effectuer une inspection du contenu en mode utilisateur et de transférer le contenu inspecté à l’aide d’une connexion différente à la destination d’origine.
Les SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT IOCTL et plusieurs autres IOCTLS connexes sont des composants en mode utilisateur utilisés pour permettre à plusieurs applications de proxy de connexion basées sur le PAM d’inspecter le même flux de trafic de manière coopérative. Chaque agent d’inspection peut inspecter à nouveau en toute sécurité le trafic réseau qui a déjà été inspecté par un autre agent d’inspection. Avec la présence de plusieurs proxys (développés par différents éditeurs de logiciels indépendants, par exemple), la connexion utilisée par un proxy pour communiquer avec la destination finale peut à son tour être redirigée par un deuxième proxy, et cette nouvelle connexion peut à nouveau être redirigée par le proxy d’origine. Sans suivi des connexions, la connexion d’origine risque de ne jamais atteindre sa destination finale, car elle est bloquée dans une boucle de proxy infinie.
Le SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT IOCTL est utilisé pour permettre à plusieurs applications de proxy de connexion basées sur PAM d’inspecter le même flux de trafic de manière coopérative. Chaque agent d’inspection peut inspecter à nouveau en toute sécurité le trafic réseau qui a déjà été inspecté par un autre agent d’inspection. Avec la présence de plusieurs proxys (développés par différents éditeurs de logiciels indépendants, par exemple), la connexion utilisée par un proxy pour communiquer avec la destination finale peut à son tour être redirigée par un deuxième proxy, et cette nouvelle connexion peut à nouveau être redirigée par le proxy d’origine. Sans suivi des connexions, la connexion d’origine risque de ne jamais atteindre sa destination finale, car elle est bloquée dans une boucle de proxy infinie. Le SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT IOCTL est utilisé pour fournir un suivi de connexion proxié sur les connexions de socket redirigées. Cette fonctionnalité PAM facilite le suivi des enregistrements de redirection à partir de la redirection initiale d’une connexion vers la connexion finale vers la destination.
Le SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS IOCTL est utilisé par un service de redirection basé sur PAM pour récupérer l’enregistrement de redirection à partir de la connexion de paquet TCP/IP acceptée (le socket connecté pour un socket TCP ou un socket UDP, par exemple) redirigé vers celui-ci par sa légende en mode noyau complémentaire inscrite à ALE_CONNECT_REDIRECT couches dans un pilote en mode noyau. Le SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT IOCTL est utilisé par un service de redirection basé sur PAM pour récupérer le contexte de redirection d’un enregistrement de redirection à partir de la connexion de paquet TCP/IP acceptée (le socket connecté pour un socket TCP ou un socket UDP, par exemple) redirigé vers celui-ci par sa légende complémentaire inscrite à ALE_CONNECT_REDIRECT couches. Le contexte de redirection est facultatif et est utilisé si l’état de redirection actuel d’une connexion est que la connexion a été redirigée par le service de redirection appelant ou que la connexion a été précédemment redirigée par le service de redirection appelant, puis redirigée ultérieurement par un autre service de redirection. Le service de redirection transfère l’enregistrement de redirection récupéré vers le socket TCP qu’il utilise pour proxyer le contenu d’origine à l’aide du SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS IOCTL.
Étant donné que le contexte de redirection PAM est un objet blob de données de longueur variable défini par le service de redirection, l’appelant peut fournir une mémoire tampon de sortie volumineuse (une mémoire tampon de 1 Ko pointée par le paramètre lpvOutBuffer , par exemple) ou peut passer en tant que taille de mémoire tampon de sortie dans le paramètre cbOutBuffer de 0 pour interroger la taille de mémoire tampon requise pour contenir l’objet blob retourné. Si la taille de la mémoire tampon de sortie n’est pas suffisante, conservez les données, les fonctions WSAIoctl ou WSPIoctl retournent ERROR_INSUFFICIENT_BUFFER et la taille de mémoire tampon requise est retournée en valeur pointée par le paramètre lpcbBytesReturned .
L’application appelant le SIO_QUERY_WF\P_CONNECTION_REDIRECT_RECORDS IOCTL n’a pas besoin de comprendre l’objet blob contenant les enregistrements de redirection récupérés. Il s’agit d’un objet blob opaque de données que l’application doit récupérer et transmettre au nouveau socket.
Voir aussi
SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS