FwpsPendOperation0 函数 (fwpsk.h)
FwpsPendOperation0 函数由标注调用,以暂停数据包处理,等待另一个操作完成。
语法
NTSTATUS FwpsPendOperation0(
[in] HANDLE completionHandle,
[out] HANDLE *completionContext
);
参数
[in] completionHandle
完成当前筛选操作所需的完成句柄。 此参数是从传递到标注驱动程序的 classifyFn 函数的 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 PASSIVE_LEVEL,则标注可以将当前处理操作写在数据包上。
若要完成以前FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_ Xxx 层的连接,标注驱动程序必须重新插入在该层克隆的数据包,并调用 FwpsCompleteOperation0 函数。
为了能够处理数据包,标注驱动程序的 classifyFn 函数应将 FWPS_CLASSIFY_OUT0 结构的 actionType 成员设置为FWP_ACTION_BLOCK并将 Flags 成员设置为FWPS_CLASSIFY_OUT_FLAG_ABSORB。
执行 FwpsCompleteOperation0 函数后,将重新进行身份验证。 TCP 连接(如果允许)是通过完成握手操作创建的,但非 TCP 连接仅创建状态条目。 FwpsPendOperation0 函数完成时,将从内存中刷新任何笔式数据包数据,因此应用程序必须在 FwpsCompleteOperation0 运行后重新传输这些数据包。 标注可以缓冲此类数据并代表它们重新输入数据。
通过调用 FwpsPendOperation0 和 FwpsCompleteOperation0,只能推迟初始应用程序层强制 (ALE) 流授权。 如果重新授权 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) |
Library | Fwpkclnt.lib |
IRQL | <= DISPATCH_LEVEL |