fonction de rappel PFN_WSK_SEND_TO (wsk.h)
La fonction WskSendTo envoie des données de datagramme à une adresse de transport distante.
Syntaxe
PFN_WSK_SEND_TO PfnWskSendTo;
NTSTATUS PfnWskSendTo(
[in] PWSK_SOCKET Socket,
[in] PWSK_BUF Buffer,
ULONG Flags,
[in, optional] PSOCKADDR RemoteAddress,
[in] ULONG ControlInfoLength,
[in, optional] PCMSGHDR ControlInfo,
[in, out] PIRP Irp
)
{...}
Paramètres
[in] Socket
Pointeur vers une structure WSK_SOCKET qui spécifie l’objet socket pour le socket de datagramme sur lequel envoyer le datagramme.
[in] Buffer
Pointeur vers une structure de WSK_BUF initialisée qui décrit la mémoire tampon de données qui contient le datagramme envoyé sur le socket.
Flags
Ce paramètre est réservé à l’utilisation du système. Une application WSK doit définir ce paramètre sur zéro.
[in, optional] RemoteAddress
Pointeur vers une structure qui spécifie l’adresse de transport distante à laquelle envoyer le datagramme. Ce pointeur doit être un pointeur vers le type de structure SOCKADDR spécifique qui correspond à la famille d’adresses spécifiée par l’application WSK spécifiée lors de la création du socket.
Si l’application WSK a défini une adresse de transport distante fixe ou une adresse de transport de destination fixe pour le socket de datagram, ce pointeur est facultatif et peut être NULL. Si NULL, le datagramme est envoyé à l’adresse de transport distante fixe ou à l’adresse de transport de destination fixe. SiNULL, le datagramme est envoyé à l’adresse de transport distante spécifiée.
Pour plus d’informations sur la définition d’une adresse de transport distante fixe pour un socket de datagram, consultez SIO_WSK_SET_REMOTE_ADDRESS.
Pour plus d’informations sur la définition d’une adresse de transport de destination fixe pour un socket datagram, consultez SIO_WSK_SET_SENDTO_ADDRESS.
[in] ControlInfoLength
Nombre d’octets de données dans la mémoire tampon pointées par le paramètre ControlInfo. S’il n’existe aucune information de contrôle associée au datagramme, le paramètre ControlInfoLength doit être égal à zéro.
[in, optional] ControlInfo
Pointeur vers une mémoire tampon qui contient des informations de contrôle associées au datagramme en cours d’envoi. Les données d’informations de contrôle se composent d’un ou plusieurs objets de données de contrôle, chacun commençant par une structure CMSGHDR. S’il n’existe aucune information de contrôle associée au datagramme, ce paramètre doit être NULL.
[in, out] Irp
Pointeur vers un IRP alloué par l’appelant que le sous-système WSK utilise pour terminer l’opération d’envoi de manière asynchrone. Pour plus d’informations sur l’utilisation d’IRPs avec des fonctions WSK, consultez Utilisation d’IRPs avec winsock Kernel Functions.
Valeur de retour
WskSendTo retourne l’un des codes NTSTATUS suivants :
Retourner le code | Description |
---|---|
|
Le datagramme a été envoyé avec succès sur le socket. L’IRP sera terminé avec l’état de réussite. Le champ IoStatus.Information du protocole IRP contient le nombre d’octets envoyés. |
|
Le sous-système WSK n’a pas pu envoyer le datagramme sur le socket immédiatement. Le sous-système WSK termine l’IRP une fois qu’il a envoyé le datagramme sur le socket. L’état de l’opération d’envoi est retourné dans le champ IoStatus.Status du protocole IRP. Si l’opération réussit, le champ IoStatus.Information du protocole IRP contient le nombre d’octets envoyés. |
|
Le socket n’est plus fonctionnel. L’IRP est terminé avec l’état d’échec. L’application WSK doit appeler la fonction WskCloseSocket pour fermer le socket dès que possible. |
|
Une erreur s’est produite. L’IRP est terminé avec l’état d’échec. |
Remarques
Si la fonction WskSendTo retourne STATUS_PENDING, la chaîne MDL décrite dans la structure WSK_BUF pointée par le paramètre Buffer doit rester verrouillée en mémoire tant que l’IRP n’est pas terminé. En outre, la mémoire tampon pointée par le paramètre ControlInfo doit également rester valide tant que l’IRP n’est pas terminé. Si l’application WSK a alloué la chaîne MDL ou la mémoire tampon des informations de contrôle avec l’une des fonctions ExAllocateXxx, elle ne peut pas libérer la mémoire avec la fonction ExFreeXxx jusqu’à la fin de l’IRP. Si l’application WSK a alloué la chaîne MDL ou la mémoire tampon des informations de contrôle sur la pile, elle ne peut pas retourner à partir de la fonction qui appelle la fonction WskSendTo jusqu’à la fin de l’IRP.
Le sous-système WSK n’effectue aucune mise en mémoire tampon des données lorsqu’il envoie des datagrammes sur un socket. Par conséquent, un appel à la fonction WskSendTo ne sera pas terminé par le sous-système WSK tant que toutes les données n’ont pas été envoyées.
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Disponible dans Windows Vista et versions ultérieures des systèmes d’exploitation Windows. |
plateforme cible | Universel |
d’en-tête | wsk.h (include Wsk.h) |
IRQL | <= DISPATCH_LEVEL |