Код элемента управления 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 .
Дополнительные сведения о перенаправлении см. в разделе Использование привязки или перенаправления подключения.
Чтобы запросить запись перенаправления для перенаправленного подключения, клиент Winsock вызывает функцию WskControlSocket со следующими параметрами.
Параметр | Значение |
---|---|
RequestType |
WskIoctl |
ControlCode |
SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS |
Уровень |
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_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. Дополнительные сведения см. в разделе Использование 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_CONTEXT