原文路径::http://msdn.microsoft.com/zh-cn/library/windows/hardware/gg463267.aspx
引用于微软官方
更新日期: 5月 15日 2008年
此信息适用于以下操作系统:
Windows Vista
Windows Server 2008
Windows 筛选平台 (WFP) 是 Windows Vista 和 Windows Server 2008 中全新的体系结构,它使独立软件供应商 (ISV) 能够筛选和修改 TCP/IP 数据包、监视或授权连接、筛选受 Internet 协议安全性 (IPsec) 保护的通信以及远程过程调用 (RPC)。对 TCP/IP 数据包的筛选和修改首次实现了对 TCP/IP 数据包处理路径的访问。在该路径中,您可以在进行其他处理之前检查或修改传出和传入数据包。通过在不同层上访问 TCP/IP 处理路径,您可以更轻松地创建防火墙、防病毒软件、诊断软件以及其他类型的应用程序和服务。
WFP 提供了各种 API,您可以参与发生在 TCP/IP 协议堆栈中多个层上的筛选决定。WFP 还集成并支持下一代防火墙功能,比如经过身份验证的通信以及基于使用 Windows Sockets API 的应用程序的动态防火墙配置。该功能也称为基于应用程序的策略。
WFP 不是防火墙。它是一组系统服务及用户模式和内核模式 API,它使您能够开发防火墙和其他监视连接或处理数据包的软件。例如,Windows Vista 和 Windows Server 2008 中的 Windows 防火墙就使用了 WFP。
如果您正在构建新的 Windows Vista 或 Windows Server 2008 软件,则使用 WFP 的优势是更高的性能、更低的编程复杂性以及内置的诊断支持。此外,您还可以对 Internet 协议版本 4 (IPv4) 和 Internet 协议版本 6 (IPv6) 通信使用内置的筛选引擎。WFP 还提供了强大的安全框架,在该框架中无法绕过配置正确的筛选器。
注意:若要提高性能,Windows Vista 和 Windows Server 2008 中的 TCP/IP 可以将任务或连接卸载到具有相应 TCP/IP 卸载功能的网络适配器。可以在不影响性能的情况下卸载未经过 WFP 筛选的连接。
Windows Vista 包含用于 TCP/IP 协议堆栈的新体系结构。该体系结构是 IPv4 和 IPv6 的集成实现,称为双 IP 层体系结构。它对直接访问 TCP/IP 协议堆栈以便在 Windows XP 和 Windows Server 2003 中处理数据包的方法进行了大量更改。这些方法包括防火墙挂钩、筛选器挂钩以及涉及自定义解决方案(如传输驱动程序接口 (TDI) 筛选器驱动程序)的其他方法。若要更正操作并在 Windows Vista 和 Windows Server 2008 中执行同等功能,通常您必须更改您的应用程序、服务或驱动程序。
注意:Windows Vista 和 Windows Server 2008 继续支持 TDI 筛选器驱动程序和 Windows Sockets 分层服务提供程序 (LSP)。
若要更改您现有的组件,请参阅本文后面的“转换组件以使用 WFP”。通常,您必须将用于访问 TCP/IP 数据包处理路径的当前方法映射到使用针对 Windows Vista 和 Windows Server 2008 的 WFP 的同等方法。针对新的 TCP/IP 协议堆栈和 WFP 体系结构对软件进行修订可以为依赖于 TCP/IP 数据包处理路径的组件提供额外的功能。这些功能在 Windows Vista 和 Windows Server 2008 之前的 Windows 版本中可能不存在。
下表概述了使用 WFP 的一些优势:
您拥有对 TCP/IP 数据包处理路径的精确访问控制。该控制不同于 Windows XP 和 Windows Server 2003 中支持的筛选器和防火墙挂钩方法,这两种方法提供对 TCP/IP 处理路径的受限访问。
由于 WFP 已经提供了一个筛选引擎,因此您不需要构建自己的筛选逻辑和引擎。您只需使用 WFP 筛选引擎并集中于组件带来的增值。
使用 WFP 时,几乎不会影响到带有将来的服务包版本的组件。
实现防火墙或数据包筛选增值解决方案更加容易,因为已经存在筛选逻辑和到 TCP/IP 协议各个层的挂钩。
根据组件的筛选和处理需求,您可以将组件从内核模式切换到用户模式,以便更轻松地开发组件。此外,用户模式组件的崩溃不会影响整个 Windows 系统。
由于所有应用程序和服务都使用相同的筛选引擎,因此很容易确定是否存在执行相同功能的其他应用程序或服务。
很容易开发可以与其他基于 WFP 的筛选解决方案共存的筛选解决方案,所有这些解决方案都遵循 WFP 筛选器仲裁规则。
应该在以下情况下使用 WFP:
组件必须在特定的 TCP/IP 协议堆栈层检查 TCP/IP 通信。
组件需要处理受 IPsec 保护的通信。
您希望在 IPsec 解密之后执行数据包处理。
您希望使用内置的 IPv6 筛选引擎执行 IPv6 数据包筛选,而不是构建自己的 IPv6 筛选引擎。
图 1 显示了 WFP 体系结构及其对第三方应用程序、服务和驱动程序的扩展能力。
图 1 WFP 的体系结构及其对第三方组件的扩展能力
WFP 体系结构由以下组件组成:
Win32 API
Win32 API 包含 WFP 筛选 API。执行数据包筛选或处理的第三方防火墙或其他应用程序可以使用 WFP 筛选 API,以在基本筛选引擎中创建筛选器。这些筛选器可以在内核模式筛选引擎中的每层使用一组预定义的筛选条件。IPsec 策略代理服务和 Windows 防火墙是 Windows Vista 和 Windows Server 2008 附带的 WFP 应用程序。有关详细信息,请参阅 MSDN 库中的 Windows 筛选平台。
基本筛选引擎
该用户模式服务通过向内核模式筛选引擎中添加筛选器来实现用户模式筛选应用程序的筛选器请求。
内核模式筛选引擎
该内核模式组件存储筛选应用程序通过基本筛选引擎创建的筛选器,并通过筛选层与 TCP/IP 堆栈以及安装的标注驱动程序集交互。由于是通过新的 TCP/IP 堆栈来处理数据包,因此每一层都与内核模式筛选引擎有联系。内核模式筛选引擎检查配置的筛选器,以确定应该允许数据包、丢弃数据包还是将数据包传递到安装的标注驱动程序以检查和修改数据包。
标注驱动程序
进行简单数据包筛选(即根据预定义的 WFP 筛选条件检查数据包以确定应该允许还是丢弃数据包)不能达到预期目的时,则使用标注驱动程序。要对数据包内容或数据修改进行深度检测,必须具有标注驱动程序。深度检测检查超出预定义筛选条件的通信。深度检测的一个示例是防病毒软件,这类软件必须检测应用程序层数据,以确保传入的数据流中不存在病毒或蠕虫。数据修改的一个示例是网络地址转换 (NAT),在其中转发数据包时,路由器将更改 IPv4 数据包的字段。Windows Vista 和 Windows Server 2008 包含处理 IPsec 和共享 Internet 连接的标注驱动程序。标注驱动程序还可以使用 WFP 内核客户端在基本筛选引擎中创建筛选器。
第三方 ISV 可以使用 WFP 采用以下方式构建应用程序或服务:
某些应用程序和服务仅使用简单数据包筛选。对于这些应用程序和服务,只需使用 WFP Win32 API 在新 TCP/IP 堆栈的相应层设置筛选器的用户模式应用程序或服务。不需要内核模式标注驱动程序。
对于必须执行数据包深度检测或修改的应用程序和服务,则必须创建一个或多个标注驱动程序或用户模式应用程序或服务。标注驱动程序或者用户模式应用程序或服务可以使用 WFP Win32 API 在 TCP/IP 堆栈的相应层上设置筛选器,以便标注驱动程序进行进一步检测。当传入或传出通信与这些筛选器匹配时,内核模式筛选引擎将数据包传递给标注驱动程序,该驱动程序先执行检测或修改,然后再返回该数据包。在有些情况下不需要用户模式应用程序或服务。
表 1 列出了在 Windows XP 和 Windows Server 2003 中处理数据包的现有方法,以及如何在 Windows Vista 和 Windows Server 2008 中更改它们,以使用 WFP。
表 1 对现有数据包处理方法的更改
Windows XP 和 Windows Server 2003 中的现有方法 | Windows Vista 和 Windows Server 2008 中的新方法 |
用于简单数据包筛选的防火墙挂钩或筛选器挂钩驱动程序。 | 使用 WFP Win32 API 的用户模式应用程序或服务。 |
用于深度数据包检测或修改的防火墙挂钩或筛选器挂钩驱动程序。 | IP 层、传输层或应用程序层强制 (ALE) 层标注驱动程序以及可选的使用 WFP Win32 API 的用户模式应用程序或服务。 |
用于简单数据包筛选的传输驱动程序接口 (TDI) 筛选器驱动程序。 | 使用 WFP Win32 API 的用户模式应用程序或服务。 |
用于深度数据包(流)检测或修改的 TDI 筛选器驱动程序。 | ALE 标注驱动程序以及可选的使用 WFP Win32 API 的用户模式应用程序或服务。 |
用于 TCP 连接或用户数据报协议 (UDP) 通信管理的 TDI 筛选器驱动程序。 | 流/数据报数据层标注驱动程序以及可选的使用 WFP Win32 API 的用户模式应用程序或服务。执行高级 TCP 连接管理(如代理、复制或克隆连接)的 TDI 筛选器驱动程序应该继续使用 TDI 筛选器驱动程序。 |
用于简单数据包筛选的 Windows Sockets LSP。 | 使用 WFP API 的用户模式应用程序或服务。 |
用于深度数据包检测或修改的 Windows Sockets LSP。 | ALE、传输或流/数据报数据层标注驱动程序以及可选的使用 WFP Win32 API 的用户模式应用程序或服务。 |
用于简单数据包筛选的网络设备接口规范 (NDIS) 中间层驱动程序。 | 使用 WFP API 的用户模式应用程序或服务。 |
用于 TCP 连接或 UDP 通信管理的 NDIS 中间层驱动程序。 | ALE 或流层标注驱动程序以及可选的使用 WFP Win32 API 的用户模式应用程序或服务。 |
用于执行媒体访问控制 (MAC) 级筛选的 NDIS 轻型筛选器驱动程序。 | 继续使用 NDIS 轻型筛选器驱动程序(WFP 不支持 MAC 级筛选)。 |
注意:Windows Vista 和 Windows Server 2008 支持 TDI。但是,Microsoft 正在考虑在未来的 Windows 版本中删除 TDI。
Windows Vista 和 Windows Server 2008 中全新的 WFP 能够进行 TCP/IP 数据包筛选和修改、连接监视或授权、IPsec 筛选以及 RPC 筛选。通常,您必须转换 Windows XP 和 Windows Server 2003 中的 TCP/IP 筛选或连接监视组件,以将 WFP 用户模式应用程序或服务和/或 WFP 内核模式标注驱动程序用于 Windows Vista 和 Windows Server 2008。
WFP 用户模式应用程序或服务:
Windows 筛选平台 - Win32 API
http://msdn.microsoft.com/en-us/library/aa366510.aspx
WFP 内核模式标注驱动程序:
Windows 筛选平台标注驱动程序 - Windows 驱动程序工具包
http://msdn.microsoft.com/en-us/library/ms796374.aspx
其他:
Windows 核心网络博客中有关 WFP 的文章
http://blogs.msdn.com/wndp/archive/tags/WFP/default.aspx
WFP 论坛
http://social.msdn.microsoft.com/forums/zh-cn/wfp/threads/
WFP 示例项目
http://blogs.msdn.com/onoj/archive/2007/05/09/windows-filtering-platform-sample.aspx