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 |
---|---|
|
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. |
|
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. |
|
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. |
|
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 |