Код элемента управления SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT

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

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

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

Дополнительные сведения о перенаправлении см. в разделе Использование привязки или перенаправления подключения.

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

Параметр Значение

RequestType

WskIoctl

ControlCode

SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT

Уровень

0

InputSize

0

InputBuffer

NULL

OutputSize

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

OutputBuffer

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

OutputSizeReturned

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

Irp

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

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

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

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

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

Клиент Winsock не должен освобождать выделенный буфер до завершения IRP подсистемой WSK. Когда подсистема WSK завершает IRP, она уведомляет клиента, вызывая подпрограмму завершения. Ссылка на этот буфер передается клиенту подсистемой WSK в параметре Context подпрограммы завершения. Размер буфера хранится в 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

См. также раздел

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

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

SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS

SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT (пакет SDK)