Share via


Código de control SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS

Descripción

El código de control SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS establece el registro de redireccionamiento en el nuevo socket TCP usado para conectarse al destino final para que lo use un servicio de redirección de la Plataforma de filtrado de Windows (PMA).

Para realizar esta operación, llame a la función WSAIoctl o WSPIoctl con los parámetros siguientes.

int WSAIoctl(
  (socket) s,                              // descriptor identifying a socket
  SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS, // dwIoControlCode
  (LPVOID) lpvInputBuffer,                 // lpvInBuffer
  (DWORD) cbInputBuffer,                   // cbInBuffer
  NULL,                                    // output buffer
  0,                                       // size of output buffer
  (LPDWORD) lpcbBytesReturned,             // number of bytes returned
  (LPWSAOVERLAPPED) lpOverlapped,          // OVERLAPPED structure
  (LPWSAOVERLAPPED_COMPLETION_ROUTINE) lpCompletionRoutine, // completion routine
);
int WSPIoctl(
  (socket) s,                              // descriptor identifying a socket
  SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS, // dwIoControlCode
  (LPVOID) lpvInputBuffer,                 // lpvInBuffer
  (DWORD) cbInputBuffer,                   // cbInBuffer
  NULL,                                    // output buffer
  0,                                       // size of output buffer
  (LPDWORD) lpcbBytesReturned,             // number of bytes returned
  (LPWSAOVERLAPPED) lpOverlapped,          // OVERLAPPED structure
  (LPWSAOVERLAPPED_COMPLETION_ROUTINE) lpCompletionRoutine,  // completion routine
  (LPWSATHREADID) lpThreadId,              // a WSATHREADID structure
  (LPINT) lpErrno                          // a pointer to the error code.
);

Parámetros

s

Descriptor que identifica un socket.

dwIoControlCode

Código de control de la operación. Use SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS para esta operación.

lpvInBuffer

Puntero al búfer de entrada. Este parámetro contiene un puntero al registro de redireccionamiento del PMA asociado al socket.

cbInBuffer

Tamaño, en bytes, del búfer de entrada.

lpvOutBuffer

Puntero al búfer de salida. Este parámetro no se usa para esta operación.

cbOutBuffer

Tamaño, en bytes, del búfer de salida. Este parámetro debe establecerse en cero.

lpcbBytesReturned

Puntero a una variable que recibe el tamaño, en bytes, de los datos almacenados en el búfer de salida.

Si el búfer de salida es demasiado pequeño, se produce un error en la llamada, WSAGetLastError devuelve WSAEINVAL y el parámetro lpcbBytesReturned apunta a un valor DWORD de cero.

Si lpOverlapped es NULL, el valor DWORD al que apunta el parámetro lpcbBytesReturned devuelto en una llamada correcta no puede ser cero.

Si el parámetro lpOverlapped no es NULL para sockets superpuestos, las operaciones que no se pueden completar inmediatamente se iniciarán y la finalización se indicará en un momento posterior. El valor DWORD al que apunta el parámetro lpcbBytesReturned que se devuelve puede ser cero, ya que el tamaño de los datos almacenados no se puede determinar hasta que se haya completado la operación superpuesta. El estado de finalización final se puede recuperar cuando se señala el método de finalización adecuado cuando se ha completado la operación.

lpvOverlapped

Puntero a una estructura WSAOVERLAPPED .

Si el socket s se creó sin el atributo superpuesto, se omite el parámetro lpOverlapped .

Si se abrió s con el atributo superpuesto y el parámetro lpOverlapped no es NULL, la operación se realiza como una operación superpuesta (asincrónica). En este caso, el parámetro lpOverlapped debe apuntar a una estructura WSAOVERLAPPED válida.

Para las operaciones superpuestas, la función WSAIoctl o WSPIoctl devuelve inmediatamente y el método de finalización adecuado se señala cuando se ha completado la operación. De lo contrario, la función no devuelve hasta que se haya completado la operación o se produzca un error.

lpCompletionRoutine

Tipo: _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE

Puntero a la rutina de finalización a la que se llama cuando se ha completado la operación (se omite para sockets no superpuestos).

lpThreadId

Puntero a una estructura WSATHREADID que usará el proveedor en una llamada posterior a WPUQueueApc. El proveedor debe almacenar la estructura WSATHREADID a la que se hace referencia (no el puntero a la misma) hasta después de que la función WPUQueueApc devuelva.

Nota Este parámetro solo se aplica a la función WSPIoctl .

lpErrno

Puntero al código de error.

Nota Este parámetro solo se aplica a la función WSPIoctl .

Valor devuelto

Si la operación se completa correctamente, la función WSAIoctl o WSPIoctl devuelve cero.

Si se produce un error en la operación o está pendiente, la función WSAIoctl o WSPIoctl devuelve SOCKET_ERROR. Para obtener información de error extendida, llame a WSAGetLastError.

Código de error Significado
WSA_IO_PENDING La operación de E/S superpuesta está en curso. Este valor se devuelve si se inició correctamente una operación superpuesta y la finalización se indicará en un momento posterior.
WSA_OPERATION_ABORTED Se ha anulado la operación de E/S debido a una solicitud de la aplicación o una salida del subproceso. Este error se devuelve si se canceló una operación superpuesta debido al cierre del socket o a la ejecución del comando SIO_FLUSH IOCTL.
WSAEACCES Se intentó acceder a un socket de una manera prohibida por sus permisos de acceso. Este error se devuelve en varias condiciones que incluyen lo siguiente: el usuario carece de los privilegios administrativos necesarios en el equipo local o la aplicación no se ejecuta en un shell mejorado como administrador integrado (RunAs administrator).
WSAEFAULT El sistema detectó una dirección de puntero no válida al intentar usar un argumento de puntero en una llamada. Este error se devuelve del parámetro lpvInBuffer, lpvoutBuffer, lpcbBytesReturned, lpOverlapped o lpCompletionRoutine no está totalmente incluido en una parte válida del espacio de direcciones del usuario.
WSAEINPROGRESS Se está ejecutando una operación de bloqueo actualmente. Este error se devuelve si se invoca la función cuando hay una devolución de llamada en curso.
WSAEINTR Una operación de bloqueo se interrumpió mediante una llamada a WSACancelBlockingCall. Este error se devuelve si se interrumpió una operación de bloqueo.
WSAEINVAL Se proporcionó un argumento no válido. Este error se devuelve si el parámetro dwIoControlCode no es un comando válido o un parámetro de entrada especificado no es aceptable o el comando no es aplicable al tipo de socket especificado.
WSAENETDOWN Una operación de socket encontró una red inactiva. Este error se devuelve si se ha producido un error en el subsistema de red.
WSAENOTSOCK Se intentó realizar una operación en algo que no es un socket. Este error se devuelve si el descriptor s no es un socket.
WSAEOPNOTSUPP La operación intentada no se admite para el tipo de objeto al que se hace referencia. Este error se devuelve si no se admite el comando IOCTL especificado. Este error también se devuelve si el proveedor de transporte no admite el SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS IOCTL.

Observaciones

El SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS IOCTL se admite en Windows 8 y Windows Server 2012 y versiones posteriores del sistema operativo.

EL PMA permite el acceso a la ruta de procesamiento de paquetes TCP/IP, donde los paquetes salientes y entrantes se pueden examinar o cambiar antes de permitirles procesarlos más. Al pulsar en la ruta de procesamiento tcp/IP, los proveedores de software independientes (ISV) pueden crear más fácilmente firewalls, software antivirus, software de diagnóstico y otros tipos de aplicaciones y servicios. EL PMA proporciona componentes en modo de usuario y modo kernel para que los ISV de terceros puedan participar en las decisiones de filtrado que tienen lugar en varias capas de la pila de protocolos TCP/IP y en todo el sistema operativo. La característica de redirección de conexión DE PMA permite que un controlador de kernel de llamada DE PMA redirija una conexión localmente a un proceso en modo de usuario, realice la inspección de contenido en modo de usuario y reenvíe el contenido inspeccionado mediante una conexión diferente al destino original.

El SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS IOCTL y otros IOCTLS relacionados son componentes en modo de usuario que se usan para permitir que varias aplicaciones proxy de conexión basadas en EL PMA inspeccionen el mismo flujo de tráfico de manera cooperativa. Cada agente de inspección puede volver a inspeccionar de forma segura el tráfico de red que ya ha sido inspeccionado por otro agente de inspección. Con la presencia de varios servidores proxy (desarrollados por diferentes ISV, por ejemplo), la conexión usada por un proxy para comunicarse con el destino final podría redirigirse a su vez por un segundo proxy y esa nueva conexión podría ser redirigida de nuevo por el proxy original. Sin el seguimiento de conexiones, es posible que la conexión original nunca llegue a su destino final, ya que se bloquea en un bucle proxy infinito.

El SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS IOCTL se usa para proporcionar el seguimiento de conexiones proxy en las conexiones de socket redirigidas. Esta característica del PMA facilita el seguimiento de los registros de redireccionamiento desde el redireccionamiento inicial de una conexión a la conexión final al destino.

El SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS IOCTL es utilizado por un servicio de redireccionamiento basado en PMA para recuperar el registro de redireccionamiento de la conexión de paquetes TCP/IP aceptada (el socket conectado para un socket TCP o un socket UDP, por ejemplo) redirigido a él por su llamada en modo kernel complementario registrada en capas de ALE_CONNECT_REDIRECT en un controlador en modo kernel. El SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT IOCTL recupera el contexto de redireccionamiento de un registro de redireccionamiento, que se usa. El contexto de redireccionamiento es opcional y se usa si el estado de redirección actual de una conexión es que el servicio de redirección de llamada redireccionó la conexión o que el servicio de redireccionamiento de llamada redirigió anteriormente, pero más tarde lo redirigió de nuevo un servicio de redireccionamiento diferente. El servicio de redireccionamiento transfiere el registro de redireccionamiento recuperado al socket TCP que usa para proxy del contenido original mediante el SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS IOCTL.

La aplicación que llama al SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS IOCTL no necesita comprender el blob que contiene el registro de redireccionamiento que se va a establecer. Se trata de un blob opaco de datos que la aplicación debe devolver al nuevo socket.

Vea también

Opciones de socket de IPPROTO_IP

SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT

SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS

socket

WSAGetLastError

WSAGetOverlappedResult

WSAIoctl

WSAOVERLAPPED

WSASocketA

WSASocketW