Код управления SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS

Описание

Код элемента управления SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS задает запись перенаправления в новый сокет TCP, используемый для подключения к конечному назначению для использования службой перенаправления платформы фильтрации Windows (WFP).

Для выполнения этой операции вызовите функцию WSAIoctl или WSPIoctl со следующими параметрами.

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.
);

Параметры

s

Дескриптор, определяющий сокет.

dwIoControlCode

Код элемента управления для операции. Для этой операции используйте SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS .

lpvInBuffer

Указатель на входной буфер. Этот параметр содержит указатель на запись перенаправления ПППП, связанную с сокетом.

cbInBuffer

Размер входного буфера (в байтах).

lpvOutBuffer

Указатель на выходной буфер. Этот параметр не используется для этой операции.

cbOutBuffer

Размер выходного буфера (в байтах). Этот параметр должен иметь нулевое значение.

lpcbBytesReturned

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

Если выходной буфер слишком мал, вызов завершается ошибкой, WSAGetLastError возвращает WSAEINVAL, а параметр lpcbBytesReturned указывает на значение DWORD , равное нулю.

Если lpOverlapped имеет значение NULL, значение DWORD , на которое указывает параметр lpcbBytesReturned , возвращаемое при успешном вызове, не может быть равным нулю.

Если параметр lpOverlapped не имеет значения NULL для перекрывающихся сокетов, операции, которые не могут быть завершены немедленно, будут инициированы, а завершение будет указано позже. Значение DWORD , на которое указывает возвращаемый параметр lpcbBytesReturned , может быть равным нулю, так как размер хранимых данных не может быть определен до завершения перекрывающейся операции. Окончательное состояние завершения можно получить, когда соответствующий метод завершения получает сигнал о завершении операции.

lpvOverlapped

Указатель на структуру WSAOVERLAPPED .

Если сокеты были созданы без перекрывающихся атрибутов, параметр lpOverlapped игнорируется.

Если объект был открыт с перекрывающимся атрибутом, а параметр lpOverlapped не имеет значения NULL, операция выполняется как перекрываемая (асинхронная) операция. В этом случае параметр lpOverlapped должен указывать на допустимую структуру WSAOVERLAPPED .

Для перекрывающихся операций функция WSAIoctl или WSPIoctl возвращается немедленно, а соответствующий метод завершения получает сигнал о завершении операции. В противном случае функция не возвращается, пока операция не будет завершена или не возникнет ошибка.

lpCompletionRoutine

Тип: _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE

Указатель на подпрограмму завершения, вызываемую при завершении операции (игнорируется для неперекрывающихся сокетов).

lpThreadId

Указатель на структуру WSATHREADID , которая будет использоваться поставщиком при последующем вызове WPUQueueApc. Поставщик должен хранить указанную структуру WSATHREADID (а не указатель на нее) до тех пор, пока не будет возвращена функция WPUQueueApc .

Примечание Этот параметр применяется только к функции WSPIoctl .

lpErrno

Указатель на код ошибки.

Примечание Этот параметр применяется только к функции WSPIoctl .

Возвращаемое значение

Если операция завершается успешно, функция WSAIoctl или WSPIoctl возвращает ноль.

Если операция завершается сбоем или находится в состоянии ожидания, функция WSAIoctl или WSPIoctl возвращает SOCKET_ERROR. Чтобы получить расширенные сведения об ошибке, вызовите WSAGetLastError.

Код ошибки Значение
WSA_IO_PENDING Выполняется перекрываемая операция ввода-вывода. Это значение возвращается, если перекрываемая операция была успешно инициирована, а завершение будет указано позже.
WSA_OPERATION_ABORTED Операция ввода-вывода прекращена из-за выхода из потока или запроса приложения. Эта ошибка возвращается, если перекрываемая операция была отменена из-за закрытия сокета или выполнения команды IOCTL SIO_FLUSH .
WSAEACCES Предпринята попытка получить доступ к сокету способом, запрещенным его разрешениями на доступ. Эта ошибка возвращается при нескольких условиях, которые включают следующее: у пользователя отсутствуют необходимые права администратора на локальном компьютере или приложение не работает в расширенной оболочке от имени встроенного администратора (RunAs administrator).
WSAEFAULT Система обнаружила недопустимый адрес указателя при попытке использовать аргумент указателя в вызове. Эта ошибка возвращается из параметра lpvInBuffer, lpvoutBuffer, lpcbBytesReturned, lpOverlapped или lpCompletionRoutine не полностью содержится в допустимой части адресного пространства пользователя.
WSAEINPROGRESS В данный момент выполняется блокирующая операция. Эта ошибка возвращается, если функция вызывается при выполнении обратного вызова.
WSAEINTR Операция блокировки была прервана вызовом WSACancelBlockingCall. Эта ошибка возвращается, если операция блокировки была прервана.
WSAEINVAL Указан недопустимый аргумент. Эта ошибка возвращается, если параметр dwIoControlCode не является допустимой командой, если указанный входной параметр недопустим или команда не применима к указанному типу сокета.
WSAENETDOWN Операция на сокете обнаружила отключение сети. Эта ошибка возвращается в случае сбоя сетевой подсистемы.
WSAENOTSOCK Предпринята попытка выполнить операцию с тем, что не является сокетом. Эта ошибка возвращается, если дескриптор не является сокетом.
WSAEOPNOTSUPP Предпринятая операция не поддерживается для типа объекта, на который указывает ссылка. Эта ошибка возвращается, если указанная команда IOCTL не поддерживается. Эта ошибка также возвращается, если поставщик транспорта не поддерживает SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS IOCTL.

Комментарии

IOCTL SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS поддерживается в Windows 8 и Windows Server 2012 и более поздних версиях операционной системы.

МПП позволяет получить доступ к пути обработки пакетов TCP/IP, где исходящие и входящие пакеты могут быть проверены или изменены перед дальнейшей обработкой. За счет использования пути обработки TCP/IP независимые поставщики программного обеспечения (ISV) могут упростить создание брандмауэров, антивирусного программного обеспечения, диагностического программного обеспечения и других типов приложений и служб. МПП предоставляет компоненты в пользовательском режиме и режиме ядра, чтобы сторонние поставщики программного обеспечения могли участвовать в решениях о фильтрации, которые принимаются на нескольких уровнях в стеке протоколов TCP/IP и во всей операционной системе. Функция перенаправления подключений МПП позволяет драйверу ядра выноски WFP перенаправлять подключение локально в процесс пользовательского режима, выполнять проверку содержимого в пользовательском режиме и пересылать проверенное содержимое с помощью другого подключения в исходное место назначения.

SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS IOCTL и несколько других связанных IOCTLS являются компонентами пользовательского режима, которые позволяют нескольким приложениям прокси-сервера подключения на основе МПП совместно проверять один и тот же поток трафика. Каждый агент проверки может безопасно повторно проверять сетевой трафик, который уже был проверен другим агентом проверки. При наличии нескольких прокси-серверов (например, разработанных разными независимыми поставщиками программного обеспечения) подключение, используемое одним прокси-сервером для обмена данными с конечным назначением, в свою очередь, может быть перенаправлено вторым прокси-сервером, а новое подключение снова может быть перенаправлено исходным прокси-сервером. Без отслеживания подключения исходное подключение может никогда не достичь конечного места назначения, так как оно зависает в бесконечном цикле прокси-сервера.

SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS IOCTL используется для отслеживания прокси-подключений для перенаправленных подключений сокета. Эта функция МПП упрощает отслеживание записей перенаправления от первоначального перенаправления подключения к окончательному подключению к месту назначения.

SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS IOCTL используется службой перенаправления на основе МПП для получения записи перенаправления из принятого подключения к пакету TCP/IP (например, подключенного сокета TCP или сокета UDP), перенаправленного на него посредством дополнительной выноски режима ядра, зарегистрированной на ALE_CONNECT_REDIRECT уровнях в драйвере режима ядра. IOCTL SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT извлекает контекст перенаправления для используемой записи перенаправления. Контекст перенаправления необязателен и используется, если текущее состояние перенаправления подключения заключается в том, что подключение было перенаправлено вызывающей службой перенаправления или подключение ранее перенаправлялось вызывающей службой перенаправления, но позже перенаправлялось другой службой перенаправления. Служба перенаправления передает полученную запись перенаправления в сокет TCP, который используется для прокси-сервера исходного содержимого, используя SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS IOCTL.

Приложению, вызывающей SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS IOCTL, не нужно понимать большой двоичный объект, содержащий заданную запись перенаправления. Это непрозрачный BLOB-объект данных, который приложение должно передать обратно в новый сокет.

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

Параметры сокета IPPROTO_IP

SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT

SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS

Сокета

WSAGetLastError

WSAGetOverlappedResult

WSAIoctl

WSAOVERLAPPED

WSASocketA

WSASocketW