简介

WFP 是微软为 Windows 平台设计的新的网络过滤处理平台,用来代替 Windows XP 和 Windows 2003 上的 hook 形式的网络过滤引擎。

架构

WFP 架设在 TCP/IP 协议栈驱动 tcpip.sys 上,同时为用户态和内核态应用提供了网络过滤接口。也就是说,WFP 是工作在 OSI 的网络层,可以截获所有 TCP/IP 协议数据包。

显然,如果应用采用了其他网络层协议栈,WFP 将不能拦截。这就需要更加底层的 NDIS Filter 驱动来实现了。

接口

WFP 的接口分为几个不同组件。

Callout API 提供了核心的包过滤功能。应用程序创建的过滤器通过 WFP 的 Callout 机制获取不同层次的内核态网络数据包,并进行过滤操作。相关 API 多以 Fwps 开头命名。

Management API 提供了对过滤器的管理功能,支持动态添加和移除过滤器。相关 API 多以 Fwpm 开头命名。

IKE/AuthIP API 提供了对 IKE 和 AuthIP 的管理功能。相关 API 多以 Ikeext 开头命名。

IPsec API 提供了对 IPsec 协议的管理功能。相关 API 多以 Ipsec 开头命名。

Shared API 提供一些通用功能。API 以 Fwp 开头命名。

WFP 在用户态和内核态的接口是不通用的,这里需要分别讨论。

用户态接口

用户态接口主要定义在 fwpsu.h 和 fwpmu.h 两个文件中。