请求内核模式下Windows Filtering Platform Veto示例
WFP 内核模式下Veto操作示例代码
过滤器仲裁机制说明
WFP的过滤器仲裁机制用于处理多过滤器对同一流量的动作冲突:高优先级过滤器可以否决低优先级过滤器的允许操作,但无法否决阻止操作。Veto就是实现这种否决能力的操作,仅针对允许动作生效。
硬阻止 vs Veto
- 硬阻止是最终动作:直接阻断流量,且移除
FWPS_RIGHT_ACTION_WRITE权限后,后续任何过滤器都无法修改该动作 - Veto是仲裁动作:当前过滤器先允许流量,但标记后续低优先级过滤器的允许动作无效,仅针对允许操作生效
Veto实现示例代码
// 内核模式下WFP Veto操作的实现 classifyOut->actionType = FWP_ACTION_PERMIT; classifyOut->rights |= FWPS_RIGHT_ACTION_WRITE; // 必须保留动作修改权限,否则无法设置Veto classifyOut->flags |= FWPS_CLASSIFY_OUT_FLAG_VETO; // 启用Veto标记,否决后续低优先级的允许动作
代码关键说明
FWP_ACTION_PERMIT:当前过滤器对流量执行允许操作,但这不是最终结果FWPS_RIGHT_ACTION_WRITE:必须保留该权限,因为Veto需要修改后续过滤器的动作权限,若移除则无法生效FWPS_CLASSIFY_OUT_FLAG_VETO:核心标记,通知WFP后续所有低优先级过滤器的FWP_ACTION_PERMIT动作将被忽略,流量最终是否允许取决于更高优先级的过滤器动作
注意事项
- Veto仅对允许动作有效,无法否决
FWP_ACTION_BLOCK这类阻止动作 - 执行Veto的过滤器优先级必须高于后续要否决的过滤器,否则Veto标记不会生效
- 若后续有更高优先级的过滤器执行硬阻止,Veto的允许动作会被覆盖
内容的提问来源于stack exchange,提问作者Zeltrax
相关产品推荐
相关产品推荐

