使用代理连接跟踪

Windows 8 及更高版本的 Windows 支持代理连接跟踪。

此 WFP 功能有助于跟踪从连接的初始重定向到目标的最终连接的重定向“记录”。 WFP 还允许标注驱动程序重定向连接。

代理连接跟踪

例如,如果存在多个代理 (,由不同的 ISV 开发) 一方用来与最终目标通信的连接又可由第二方重定向:和该新连接可以再次由原始参与方重定向。 如果没有连接跟踪,原始连接可能永远不会到达其最终目标,因为它卡在无限代理循环中。

支持连接跟踪的数据字段标识符的新增内容包括:

FWPS_FIELD_Xxx_ALE_ORIGINAL_APP_ID
代理连接的原始应用程序的完整路径。 如果尚未代理应用程序,则此路径与xxx_ALE_APP_ID相同。

FWPS_FIELD_Xxx_PACKAGE_ID
包标识符是标识关联的 AppContainer 进程的 SID) (安全标识符。

重定向连接

标注驱动程序调用 FwpsRedirectHandleCreate0 函数来创建可用于重定向 TCP 连接的句柄。

本节包括下列主题:

使用重定向句柄

查询重定向状态

使用重定向句柄

在 ALE 连接重定向标注可以将连接重定向到本地进程之前,它必须使用 FwpsRedirectHandleCreate0 函数获取重定向句柄,并将该句柄置于 FWPS_CONNECT_REQUEST0 结构中。 标注修改 ALE 连接重定向层的分类Fn 中的结构。

FWPS_CONNECT_REQUEST0 结构包含以下用于重定向的成员:

术语 说明

localRedirectHandle

标注驱动程序通过调用 FwpsRedirectHandleCreate0 函数创建的重定向句柄。

localRedirectContext

标注驱动程序通过调用 ExAllocatePoolWithTag 函数分配的标注驱动程序上下文区域。

localRedirectContextSize

标注提供的上下文区域的大小(以字节为单位)。

标注驱动程序使用完重定向句柄后,必须调用 FwpsRedirectHandleDestroy0 函数来销毁句柄。

查询重定向状态

标注驱动程序调用 FwpsQueryConnectionRedirectState0 函数以获取连接的重定向状态。 FWPS_CONNECTION_REDIRECT_STATE枚举是调用 FwpsQueryConnectionRedirectState0 函数的返回类型。

如果重定向状态为FWPS_CONNECTION_NOT_REDIRECTED,则ALE_CONNECT_REDIRECT标注可以继续代理连接。

如果重定向状态为FWPS_CONNECTION_REDIRECTED_BY_SELF,则ALE_CONNECT_REDIRECT标注应返回FWP_ACTION_PERMIT/FWP_ACTION_CONTINUE。

如果重定向状态为FWPS_CONNECTION_REDIRECTED_BY_OTHER,ALE_CONNECT_REDIRECT标注可以继续代理连接,如果它不信任其他检查器的结果。

如果重定向状态为FWPS_CONNECTION_PREVIOUSLY_REDIRECTED_BY_SELF,则即使其他检查器的结果不可接受,ALE_CONNECT_REDIRECT标注也不得执行重定向。 在这种情况下,它必须允许或阻止ALE_AUTH_CONNECT层) 的连接 (。