Compartilhar via


LPFN_RIOREGISTERBUFFER função de retorno de chamada (mswsock.h)

A função RIORegisterBuffer registra um RIO_BUFFERID, um descritor de buffer registrado, com um buffer especificado para uso com as extensões de E/S registradas do Winsock.

Sintaxe

LPFN_RIOREGISTERBUFFER LpfnRioregisterbuffer;

RIO_BUFFERID LpfnRioregisterbuffer(
  PCHAR DataBuffer,
  DWORD DataLength
)
{...}

Parâmetros

DataBuffer

Um ponteiro para o início do buffer de memória a ser registrado.

DataLength

O comprimento, em bytes, no buffer a ser registrado.

Retornar valor

Se nenhum erro ocorrer, a função RIORegisterBuffer retornará um descritor de buffer registrado. Caso contrário, um valor de RIO_INVALID_BUFFERID será retornado e um código de erro específico poderá ser recuperado chamando a função WSAGetLastError .

Código de retorno Descrição
WSAEFAULT
O sistema detectou um endereço de ponteiro inválido ao tentar usar um argumento de ponteiro em uma chamada. Esse erro será retornado se um ponteiro de buffer inválido for passado no parâmetro DataBuffer .
WSAEINVAL
Um parâmetro inválido foi passado para a função.
Esse erro será retornado se o parâmetro DataLength for zero.

Comentários

A função RIORegisterBuffer cria um identificador de buffer registrado para um buffer especificado. Quando um buffer é registrado, as páginas de memória virtual que contêm o buffer serão bloqueadas na memória física.

Se vários buffers pequenos e não contíguos forem registrados, o volume de memória física para os buffers poderá ser efetivamente tão grande quanto uma página de memória inteira por registro. Nesses casos, pode ser benéfico alocar vários buffers de solicitação juntos.

Também há uma pequena quantidade de sobrecarga na memória física usada para o registro de buffer em si. Portanto, se houver muitas alocações agregadas em uma única alocação maior, o volume de memória física poderá ser reduzido ainda mais agregando os registros de buffer também. Nesse caso, o aplicativo pode precisar ter cuidado extra para garantir que os buffers sejam eventualmente desregistrados, mas não enquanto quaisquer solicitações de envio ou recebimento estiverem pendentes.

Uma parte de um buffer registrado é passada para as funções RIOSend, RIOSendEx, RIOReceive e RIOReceiveEx no parâmetro pData para enviar ou receber dados.

Quando o identificador de buffer não for mais necessário, chame a função RIODeregisterBuffer para cancelar o registro do identificador de buffer.

Observação

O ponteiro de função para a função RIORegisterBuffer deve ser obtido em tempo de execução fazendo uma chamada para a função WSAIoctl com o SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER opcode especificado. O buffer de entrada passado para a função WSAIoctl deve conter WSAID_MULTIPLE_RIO, um GUID (identificador global exclusivo) cujo valor identifica as funções de extensão de E/S registradas do Winsock. Em caso de êxito, a saída retornada pela função WSAIoctl contém um ponteiro para a estrutura RIO_EXTENSION_FUNCTION_TABLE que contém ponteiros para as funções de extensão de E/S registradas do Winsock. O SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER IOCTL é definido no arquivo de cabeçalho Ws2def.h . O GUID WSAID_MULTIPLE_RIO é definido no arquivo de cabeçalho Mswsock.h .

 

Windows Phone 8: essa função tem suporte para aplicativos da Windows Phone Store no Windows Phone 8 e posterior.

Windows 8.1 e Windows Server 2012 R2: essa função tem suporte para aplicativos da Windows Store em Windows 8.1, Windows Server 2012 R2 e posteriores.

Requisitos

Requisito Valor
Cabeçalho mswsock.h