LPFN_RIOREGISTERBUFFER función de devolución de llamada (mswsock.h)

La función RIORegisterBuffer registra un RIO_BUFFERID, un descriptor de búfer registrado, con un búfer especificado para su uso con las extensiones de E/S registradas de Winsock.

Sintaxis

LPFN_RIOREGISTERBUFFER LpfnRioregisterbuffer;

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

Parámetros

DataBuffer

Puntero al principio del búfer de memoria que se va a registrar.

DataLength

Longitud, en bytes, en el búfer que se va a registrar.

Valor devuelto

Si no se produce ningún error, la función RIORegisterBuffer devuelve un descriptor de búfer registrado. De lo contrario, se devuelve un valor de RIO_INVALID_BUFFERID y se puede recuperar un código de error específico llamando a la función WSAGetLastError .

Código devuelto Descripción
WSAEFAULT
El sistema ha detectado una dirección de puntero no válida al intentar usar un argumento de puntero en una llamada. Este error se devuelve si se pasa un puntero de búfer no válido en el parámetro DataBuffer .
WSAEINVAL
Se pasó un parámetro no válido a la función.
Este error se devuelve si el parámetro DataLength es cero.

Comentarios

La función RIORegisterBuffer crea un identificador de búfer registrado para un búfer especificado. Cuando se registra un búfer, las páginas de memoria virtual que contienen el búfer se bloquearán en la memoria física.

Si se registran varios búferes pequeños y no contiguos, la superficie de memoria física de los búferes puede ser tan grande como una página de memoria completa por registro. En estos casos, puede ser beneficioso asignar varios búferes de solicitud juntos.

También hay una pequeña cantidad de sobrecarga en la memoria física que se usa para el propio registro del búfer. Por lo tanto, si hay muchas asignaciones agregadas en una sola asignación mayor, la superficie de memoria física también se puede reducir agregando los registros de búfer. En este caso, es posible que la aplicación tenga que tener cuidado adicional para asegurarse de que los búferes se anulan finalmente, pero no mientras que las solicitudes de envío o recepción estén pendientes.

Una parte de un búfer registrado se pasa a las funciones RIOSend, RIOSendEx, RIOReceive y RIOReceiveEx en el parámetro pData para enviar o recibir datos.

Cuando el identificador del búfer ya no sea necesario, llame a la función RIODeregisterBuffer para anular el registro del identificador del búfer.

Nota

El puntero de función a la función RIORegisterBuffer se debe obtener en tiempo de ejecución realizando una llamada a la función WSAIoctl con el código de operación SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER especificado. El búfer de entrada pasado a la función WSAIoctl debe contener WSAID_MULTIPLE_RIO, un identificador único global (GUID) cuyo valor identifica las funciones de extensión de E/S registradas de Winsock. Si se ejecuta correctamente, la salida devuela por la función WSAIoctl contiene un puntero a la estructura de RIO_EXTENSION_FUNCTION_TABLE que contiene punteros a las funciones de extensión de E/S registradas de Winsock. El SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER IOCTL se define en el archivo de encabezado Ws2def.h . El GUID de WSAID_MULTIPLE_RIO se define en el archivo de encabezado Mswsock.h .

 

Windows Phone 8: esta función es compatible con las aplicaciones de Windows Phone Store en Windows Phone 8 y versiones posteriores.

Windows 8.1 y Windows Server 2012 R2: esta función es compatible con las aplicaciones de la Tienda Windows en Windows 8.1, Windows Server 2012 R2 y versiones posteriores.

Requisitos

Requisito Valor
Header mswsock.h