code de contrôle SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT
L’opération de contrôle d’E/S de socket SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT permet à un client Winsock de récupérer le contexte de redirection d’un enregistrement de redirection pour une connexion redirigée.
Un enregistrement de redirection PAM est une mémoire tampon de données opaques que PAM doit définir sur une connexion proxy sortante afin que la connexion redirigée et la connexion d’origine soient liées logiquement.
Note La requête SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS ne peut être utilisée que si la connexion a été redirigée au niveau de la couche FWPS_LAYER_ALE_CONNECT_REDIRECT_V4 ou FWPS_LAYER_ALE_CONNECT_REDIRECT_V6 par un client PAM.
Pour plus d’informations sur la redirection, consultez Utilisation de la redirection de liaison ou de connexion.
Pour interroger le contexte de redirection d’un enregistrement de redirection, un client Winsock appelle la fonction WskControlSocket avec les paramètres suivants.
Paramètre | Valeur |
---|---|
RequestType |
WskIoctl |
ControlCode |
SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT |
Niveau |
0 |
InputSize |
0 |
InputBuffer |
NULL |
OutputSize |
Taille, en octets, de la mémoire tampon vers laquelle pointe le paramètre OutputBuffer . |
OutputBuffer |
Pointeur vers la mémoire tampon qui reçoit le contexte de redirection pour l’enregistrement de redirection pour la connexion TCP acceptée. La taille de la mémoire tampon est spécifiée dans le paramètre OutputSize . |
OutputSizeReturned |
Pointeur vers une variable de type ULONG qui reçoit le nombre d’octets de données copiées dans la mémoire tampon pointée par le paramètre OutputBuffer . |
Irp |
Pointeur vers un IRP. |
L’appelant peut effectuer cette requête de l’une des manières suivantes :
- Il peut définir outputBuffer sur une grande mémoire tampon d’une taille d’environ 1 Ko. Si la taille de la mémoire tampon de sortie n’est pas suffisante, WskControlSocket retourne STATUS_BUFFER_TOO_SMALL et OutputSizeReturned contient la taille requise de la mémoire tampon. Une mémoire tampon plus grande peut ensuite être allouée et WskControlSocket peut être appelée à nouveau avec le SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT request et OutputBuffer défini sur la mémoire tampon plus grande.
- Il peut également définir le paramètre OutputSize sur 0 et outputBuffer sur NULL, puis appeler WskControlSocket. Une fois l’opération terminée, la fonction WskControlSocket récupère la taille de la mémoire tampon de sortie, en octets, dans le paramètre OutputSizeReturned . Une mémoire tampon de taille appropriée peut ensuite être allouée et WskControlSocket peut être appelée à nouveau avec le SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT request et OutputBuffer définis sur la mémoire tampon.
Note Il est également possible d’effectuer cette requête dans une application en mode utilisateur à l’aide de SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT (SDK).
Pour ce type de requête, le client Winsock doit spécifier un pointeur vers un IRP et un pointeur vers sa routine d’achèvement. L’IRP peut être transmis au client par un pilote supérieur ou le client peut choisir d’allouer l’IRP. Pour spécifier la routine d’achèvement, le client doit appeler IoSetCompletionRoutine. Pour plus d’informations, consultez Utilisation des runtimes d’intégration avec les fonctions du noyau Winsock.
Le client Winsock ne doit pas libérer la mémoire tampon allouée tant que l’IRP n’est pas terminée par le sous-système WSK. Lorsque le sous-système WSK termine l’IRP, il avertit le client en appelant la routine d’achèvement. Une référence à cette mémoire tampon est transmise au client par le sous-système WSK dans le paramètre Context de la routine d’achèvement. La taille de la mémoire tampon est stockée dans Irp-IoStatus.Information>.
Le client peut obtenir la status de l’IRP en vérifiant Irp-IoStatus.Status>. Irp-> IoStatus.Status est défini sur STATUS_SUCCESS si la demande réussit. Sinon, il contiendra STATUS_INTEGER_OVERFLOW, STATUS_NOT_FOUND, STATUS_BUFFER_TOO_SMALL ou STATUS_ACCESS_DENIED si l’appel échoue.
Configuration requise
Client minimal pris en charge |
Windows 8 |
Serveur minimal pris en charge |
Windows Server 2012 |
En-tête |
Mstcpip.h |
IRQL |
PASSIVE_LEVEL |
Voir aussi
Utilisation de la redirection de liaison ou de connexion
Utilisation des runtimes d’intégration avec les fonctions du noyau Winsock