SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT 控制代码
SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT套接字 I/O 控制操作允许 Winsock 客户端检索重定向连接的重定向记录的重定向上下文。
WFP 重定向记录是一个不透明数据的缓冲区,WFP 必须在出站代理连接上设置该缓冲区,以便重定向的连接与原始连接在逻辑上相关。
注意仅当连接被 WFP 客户端重定向到FWPS_LAYER_ALE_CONNECT_REDIRECT_V4层或FWPS_LAYER_ALE_CONNECT_REDIRECT_V6层时,才能使用SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS查询。
有关重定向的详细信息,请参阅 使用绑定或连接重定向。
若要查询重定向记录的重定向上下文,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 KB 的大型缓冲区。 如果输出缓冲区大小不够大, 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 内核函数配合使用。
在 WSK 子系统完成 IRP 之前,Winsock 客户端不得释放分配的缓冲区。 当 WSK 子系统完成 IRP 时,它会通过调用完成例程来通知客户端。 对该缓冲区的引用由完成例程的 Context 参数中的 WSK 子系统传递给客户端。 缓冲区的大小存储在 Irp-IoStatus.Information> 中。
客户端可以通过检查 Irp-IoStatus.Status> 来获取 IRP 的状态。 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 |