FwpsPendOperation0 函数 (fwpsk.h)
FwpsPendOperation0 函数由标注调用,以挂起数据包处理,等待另一个作完成。
语法
NTSTATUS FwpsPendOperation0(
[in] HANDLE completionHandle,
[out] HANDLE *completionContext
);
参数
[in] completionHandle
笔触当前筛选作所需的完成句柄。 此参数是从传递给标注驱动程序的 classifyFn 函数 FWPS_INCOMING_METADATA_VALUES0 结构的 FWPS_INCOMING_METADATA_VALUES0 结构的 completionHandle 成员获取的。
[out] completionContext
此笔作完成上下文的句柄。 当标注准备好恢复数据包处理时,它将调用 FwpsCompleteOperation0 函数,并将此参数的值作为输入 completionContext 参数。
返回值
FwpsPendOperation0 函数返回以下 NTSTATUS 代码之一。
返回代码 | 描述 |
---|---|
|
数据包处理已成功插入。 |
|
在重新授权分类作中,已调用 FwpsPendOperation0。 有关详细信息,请参阅“备注”。 |
|
一个或多个参数无效。 |
|
TCP/IP 网络堆栈尚未准备好允许此作。 |
|
发生错误。 |
言论
标注应保留 completionContext 参数值,直到它恢复数据包处理。 当提示调用此函数的作已完成时,标注应调用 FwpsCompleteOperation0 函数,并向其传递 completionContext 参数值。
标注只能调用此函数来绘制源自 FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_ Xxx、FWPM_LAYER_ALE_AUTH_LISTEN_ Xxx或 FWPM_LAYER_ALE_AUTH_CONNECT_ Xxx筛选层的数据包。 当标注必须在其中一个层上执行处理时,标注可以对数据包执行当前处理作,这些层可能需要较长的时间间隔才能完成,或者在 IRQL = PASSIVE_LEVEL(如果当前 IRQL > PASSIVE_LEVEL)发生。
若要完成之前在 FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_ Xxx 层上绘制的连接,标注驱动程序必须重新连接在该层克隆的数据包,并调用 FwpsCompleteOperation0 函数。
为了能够进行数据包处理,标注驱动程序的 classifyFn 函数应将 FWPS_CLASSIFY_OUT0 结构的 actionType 成员设置为FWP_ACTION_BLOCK,标志 成员设置为FWPS_CLASSIFY_OUT_FLAG_ABSORB。
FwpsCompleteOperation0 函数执行后,重新进行身份验证。 TCP 连接(如果允许)是通过完成握手作创建的,但非 TCP 连接仅创建状态条目。 FwpsPendOperation0 函数完成时,任何笔接数据包数据将从内存中刷新,因此应用程序必须在 FwpsCompleteOperation0 运行后重新传输这些数据包。 标注可以缓冲此类数据,并代表数据重新执行。
只有初始应用程序层强制(ALE)流授权可以通过调用 FwpsPendOperation0 和 FwpsCompleteOperation0来推迟。 如果重新授权 ALE 流,则会设置FWP_CONDITION_FLAG_IS_REAUTHORIZE标志。 如果设置了FWP_CONDITION_FLAG_IS_REAUTHORIZE标志,则从 FWPM_LAYER_ALE_AUTH_CONNECT_ Xxx 或 FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_ Xxx筛选层调用FwpsPendOperation0,并且将返回STATUS_FWP_CANNOT_PEND状态代码。 有关详细信息,请参阅 Windows SDK 中的 ALE 重新授权。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | 从 Windows Vista 开始可用。 |
目标平台 | 普遍 |
标头 | fwpsk.h (包括 Fwpsk.h) |
库 | Fwpkclnt.lib |
IRQL | <= DISPATCH_LEVEL |