Compartilhar via


PFN_WSK_SEND_TO função de retorno de chamada (wsk.h)

A função WskSendTo envia dados de datagram para um endereço de transporte remoto.

Sintaxe

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
)
{...}

Parâmetros

[in] Socket

Um ponteiro para uma estrutura WSK_SOCKET que especifica o objeto de soquete para o soquete de datagrama sobre o qual enviar o datagrama.

[in] Buffer

Um ponteiro para uma estrutura de WSK_BUF inicializada que descreve o buffer de dados que contém o datagram que está sendo enviado pelo soquete.

Flags

Esse parâmetro é reservado para uso do sistema. Um aplicativo WSK deve definir esse parâmetro como zero.

[in, optional] RemoteAddress

Um ponteiro para uma estrutura que especifica o endereço de transporte remoto para o qual enviar o datagrama. Esse ponteiro deve ser um ponteiro para o tipo de estrutura SOCKADDR específico que corresponde à família de endereços especificada pelo aplicativo WSK ao criar o soquete.

Se o aplicativo WSK tiver definido um endereço de transporte remoto fixo ou um endereço de transporte de destino fixo para o soquete de datagrama, esse ponteiro será opcional e poderá ser NULL. Se NULL, o datagrama será enviado para o endereço de transporte remoto fixo ou o endereço de transporte de destino fixo. Se não for NULL, o datagrama será enviado para o endereço de transporte remoto especificado.

Para obter mais informações sobre como definir um endereço de transporte remoto fixo para um soquete de datagrama, consulte SIO_WSK_SET_REMOTE_ADDRESS.

Para obter mais informações sobre como definir um endereço de transporte de destino fixo para um soquete de datagrama, consulte SIO_WSK_SET_SENDTO_ADDRESS.

[in] ControlInfoLength

O número de bytes de dados no buffer apontado pelo parâmetro ControlInfo . Se não houver informações de controle associadas ao datagram, o parâmetro ControlInfoLength deverá ser zero.

[in, optional] ControlInfo

Um ponteiro para um buffer que contém informações de controle associadas ao datagrama que está sendo enviado. Os dados de informações de controle consistem em um ou mais objetos de dados de controle, cada um dos quais começa com uma estrutura CMSGHDR . Se não houver informações de controle associadas ao datagram, esse parâmetro deverá ser NULL.

[in, out] Irp

Um ponteiro para um IRP alocado pelo chamador que o subsistema WSK usa para concluir a operação de envio de forma assíncrona. Para obter mais informações sobre como usar IRPs com funções WSK, consulte Usando IRPs com funções de kernel Winsock.

Retornar valor

WskSendTo retorna um dos seguintes códigos NTSTATUS:

Código de retorno Descrição
STATUS_SUCCESS
O datagrama foi enviado com êxito pelo soquete. O IRP será concluído com êxito status. O campo IoStatus.Information do IRP contém o número de bytes que foram enviados.
STATUS_PENDING
O subsistema do WSK não pôde enviar o datagram pelo soquete imediatamente. O subsistema WSK concluirá o IRP depois de enviar o datagram pelo soquete. O status da operação de envio será retornado no campo IoStatus.Status do IRP. Se a operação for bem-sucedida, o campo IoStatus.Information do IRP conterá o número de bytes que foram enviados.
STATUS_FILE_FORCED_CLOSED
O soquete não está mais funcional. O IRP será concluído com falha status. O aplicativo WSK deve chamar a função WskCloseSocket para fechar o soquete o mais rápido possível.
Outros códigos status
Ocorreu um erro. O IRP será concluído com falha status.

Comentários

Se a função WskSendTo retornar STATUS_PENDING, a cadeia de MDL descrita na estrutura WSK_BUF apontada pelo parâmetro Buffer deverá permanecer bloqueada na memória até que o IRP seja concluído. Além disso, o buffer apontado pelo parâmetro ControlInfo também deve permanecer válido até que o IRP seja concluído. Se o aplicativo WSK alocou a cadeia MDL ou o buffer de informações de controle com uma das funções ExAllocateXxx , ele não poderá liberar a memória com a função ExFreeXxx correspondente até que o IRP seja concluído. Se o aplicativo WSK alocou a cadeia MDL ou o buffer de informações de controle na pilha, ele não poderá retornar da função que chama a função WskSendTo até que o IRP seja concluído.

O subsistema do WSK não executa nenhum buffer de dados quando envia datagramas em um soquete. Portanto, uma chamada para a função WskSendTo não será concluída pelo subsistema do WSK até que todos os dados sejam realmente enviados.

Requisitos

Requisito Valor
Cliente mínimo com suporte Disponível no Windows Vista e versões posteriores dos sistemas operacionais Windows.
Plataforma de Destino Universal
Cabeçalho wsk.h (inclua Wsk.h)
IRQL <= DISPATCH_LEVEL

Confira também

CMSGHDR

SOCKADDR

WSK_BUF

WSK_PROVIDER_DATAGRAM_DISPATCH

WSK_SOCKET

WskCloseSocket

WskControlSocket

WskReceiveFrom

WskReceiveFromEvent