Partager via


PFN_WSK_SEND_TO fonction de rappel (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 de WSK_SOCKET qui spécifie l’objet socket pour le socket de datagramme sur lequel envoyer le datagramme.

[in] Buffer

Pointeur vers une structure 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é à une utilisation 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 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 datagramme, ce pointeur est facultatif et peut avoir la valeur NULL. Si la valeur est NULL, le datagramme est envoyé à l’adresse de transport distante fixe ou à l’adresse de transport de destination fixe. Si la valeur n’est pas NULL, 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 datagramme, 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 de datagramme, consultez SIO_WSK_SET_SENDTO_ADDRESS.

[in] ControlInfoLength

Nombre d’octets de données dans la mémoire tampon vers laquelle pointe le paramètre ControlInfo . Si aucune information de contrôle n’est 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 envoyé. 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 . Si aucune information de contrôle n’est associée au datagramme, ce paramètre doit être NULL.

[in, out] Irp

Pointeur vers un IRP alloué à l’appelant que le sous-système WSK utilise pour effectuer l’opération d’envoi de manière asynchrone. Pour plus d’informations sur l’utilisation des runtimes d’intégration avec les fonctions WSK, consultez Utilisation des runtimes d’intégration avec les fonctions du noyau Winsock.

Valeur retournée

WskSendTo retourne l’un des codes NTSTATUS suivants :

Code de retour Description
STATUS_SUCCESS
Le datagramme a été correctement envoyé sur le socket. L’IRP sera complété avec succès status. Le champ IoStatus.Information de l’IRP contient le nombre d’octets qui ont été envoyés.
STATUS_PENDING
Le sous-système WSK n’a pas pu envoyer immédiatement le datagramme sur le socket. Le sous-système WSK termine l’IRP après avoir envoyé le datagramme sur le socket. La status de l’opération d’envoi est retournée dans le champ IoStatus.Status de l’IRP. Si l’opération réussit, le champ IoStatus.Information de l’IRP contient le nombre d’octets qui ont été envoyés.
STATUS_FILE_FORCED_CLOSED
Le socket n’est plus fonctionnel. L’IRP sera terminé avec l’échec status. L’application WSK doit appeler la fonction WskCloseSocket pour fermer le socket dès que possible.
Autres codes status
Une erreur est survenue. L’IRP sera terminé avec l’échec status.

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 jusqu’à ce que l’IRP soit terminée. En outre, la mémoire tampon vers laquelle pointe le paramètre ControlInfo doit également rester valide jusqu’à ce que l’IRP soit terminée. Si l’application WSK a alloué la chaîne MDL ou la mémoire tampon d’informations de contrôle à l’une des fonctions ExAllocateXxx , elle ne peut libérer la mémoire avec la fonction ExFreeXxx correspondante qu’une fois l’IRP terminée. Si l’application WSK a alloué la chaîne MDL ou la mémoire tampon d’informations de contrôle sur la pile, elle ne peut pas retourner à partir de la fonction qui appelle la fonction WskSendTo tant qu’une fois l’IRP terminée.

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 effectué par le sous-système WSK tant que toutes les données n’auront pas été effectivement envoyées.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible dans Windows Vista et versions ultérieures des systèmes d’exploitation Windows.
Plateforme cible Universal
En-tête wsk.h (inclure Wsk.h)
IRQL <= DISPATCH_LEVEL

Voir aussi

CMSGHDR

SOCKADDR

WSK_BUF

WSK_PROVIDER_DATAGRAM_DISPATCH

WSK_SOCKET

WskCloseSocket

WskControlSocket

WskReceiveFrom

WskReceiveFromEvent