Поделиться через


код элемента управления SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS

Операция управления SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS сокета ввода-вывода позволяет клиенту Winsock получить запись перенаправления для перенаправленного подключения.

Запись перенаправления МПП — это буфер непрозрачных данных, которые МПП должна установить на исходящем прокси-подключении, чтобы перенаправленное подключение и исходное соединение логически связаны.

Примечание Запрос SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS можно использовать только в том случае, если подключение было перенаправлено на FWPS_LAYER_ALE_CONNECT_REDIRECT_V4 или FWPS_LAYER_ALE_CONNECT_REDIRECT_V6 клиентом МПП.

Дополнительные сведения о перенаправлении см. в разделе Using Bind or Connect Redirection.

Чтобы запросить запись перенаправления для перенаправленного подключения, клиент Winsock вызывает функцию WskControlSocket со следующими параметрами.

Параметр Ценность

RequestType

WskIoctl

ControlCode

SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS

уровня

0

InputSize

0

InputBuffer

НЕДЕЙСТВИТЕЛЬНЫЙ

OutputSize

Размер буфера в байтах, на который указывает параметр OutputBuffer.

OutputBuffer

Указатель на буфер, получающий запись перенаправления для принятого TCP-подключения. Размер буфера указывается в параметре OutputSize.

OutputSizeReturned

Указатель на переменную ULONG ULONGтипа, которая получает количество байтов данных, скопированных в буфер, на который указывает параметр OutputBuffer.

Irp

Указатель на IRP.

Вызывающий объект может выполнять этот запрос в любом из следующих способов:

  • Он может задать для OutputBuffer большой буфер примерно 1 КБ. Если размер выходного буфера недостаточно велик, WskControlSocket вернет STATUS_BUFFER_TOO_SMALL и OutputSizeReturned будет содержать необходимый размер буфера. Затем можно выделить больший буфер и WskControlSocket с запросом SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS и OutputBuffer задать для большего буфера.
  • Кроме того, параметр outputSize может иметь значение 0, а OutputBuffer значение NULL, а затем вызвать WskControlSocket. По завершении функция WskControlSocket извлекает размер выходного буфера в байтах в параметре OutputSizeReturned. Затем можно выделить буфер соответствующего размера, а затем WskControlSocket с запросом SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS и OutputBuffer задать буфер.

Примечание Этот запрос также можно выполнить в приложении пользовательского режима с помощью SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS (SDK).

Для этого типа запроса клиент Winsock должен указать указатель на IRP и указатель на его подпрограмму завершения. IRP может передаваться клиенту более высоким драйвером или клиент может выбрать выделение IRP. Чтобы указать подпрограмму завершения, клиент должен вызвать IoSetCompletionRoutine. Дополнительные сведения см. в разделе Использование irPs с функциями ядра Winsock.

Клиент Winsock не должен освободить выделенный буфер до завершения IRP подсистемой WSK. Когда подсистема WSK завершает IRP, она уведомляет клиента, вызвав подпрограмму завершения. Ссылка на этот буфер передается клиенту подсистемой WSK в параметре контекста контекста подпрограммы завершения. Размер буфера хранится в Irp->IoStatus.Information.

Клиент может получить состояние IRP, проверив Irp->IoStatus.Status. Irp->IoStatus.Status будет иметь значение STATUS_SUCCESS, если запрос выполнен успешно. В противном случае он будет содержать STATUS_INTEGER_OVERFLOW, STATUS_NOT_FOUND, STATUS_BUFFER_TOO_SMALLили STATUS_ACCESS_DENIED, если вызов не выполнен.

Требования

Минимальный поддерживаемый клиент

Windows 8

Минимальный поддерживаемый сервер

Windows Server 2012

Заголовок

Mstcpip.h

IRQL

PASSIVE_LEVEL

См. также

использование привязки или перенаправления подключения

использование IRPs с функциями ядра Winsock

SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT

SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS (ПАКЕТ SDK)

SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS