Compartilhar via


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

A função RIOResizeCompletionQueue redimensiona uma fila de conclusão de E/S para ser maior ou menor para uso com as extensões de E/S registradas do Winsock.

Sintaxe

LPFN_RIORESIZECOMPLETIONQUEUE LpfnRioresizecompletionqueue;

BOOL LpfnRioresizecompletionqueue(
  RIO_CQ CQ,
  DWORD QueueSize
)
{...}

Parâmetros

CQ

Um descritor que identifica uma fila de conclusão de E/S existente para redimensionar.

QueueSize

Retornar valor

Se nenhum erro ocorrer, a função RIOResizeCompletionQueue retornará TRUE. Caso contrário, um valor de FALSE é retornado e um código de erro específico pode 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 a fila de conclusão especificada no parâmetro CQ contiver um ponteiro inválido.
WSAEINVAL
Um parâmetro inválido foi passado para a função. Esse erro será retornado se o parâmetro CQ não for válido (RIO_INVALID_CQ, por exemplo). Esse erro também será retornado se o tamanho da fila especificada no parâmetro QueueSize for maior que RIO_CQ_MAX_SIZE.
WSAENOBUFS
Memória suficiente não pôde ser alocada. Esse erro será retornado se a memória não puder ser alocada para a fila especificada no parâmetro QueueSize .
WSAETOOMANYREFS
Há muitas operações que ainda fazem referência à fila de conclusão de E/S. O redimensionamento dessa fila de conclusão de E/S para ser menor não é possível no momento.

A função RIOResizeCompletionQueue redimensiona uma fila de conclusão de E/S para ser maior ou menor. Se a fila de conclusão de E/S já contiver conclusões, essas conclusões serão copiadas para a nova fila de conclusão.

As filas de conclusão de E/S têm um tamanho mínimo necessário que depende do número de filas de solicitação associadas à fila de conclusão e do número de envios e recebimentos nas filas de solicitação. Se um aplicativo chamar a função RIOResizeCompletionQueue e tentar definir a fila muito pequena para o número de conclusões existentes na fila de conclusão de E/S, a chamada falhará e a fila não será redimensionada.

Observação

O ponteiro de função para a função RIOResizeCompletionQueue 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. Com ê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.

Acesso thread-safe

Se vários threads tentarem acessar o mesmo RIO_CQ usando a função RIODequeueCompletion ou RIOResizeCompletionQueue , o acesso deverá ser coordenado por uma seção crítica, bloqueio de gravador de leitor fino ou mecanismo de exclusão mútua semelhante. Se as filas de conclusão não forem compartilhadas, a exclusão mútua não será necessária.

Requisitos

Requisito Valor
Cabeçalho mswsock.h