Windows 筛选平台) (最佳做法

以下列表包含使用 Windows 筛选平台 (WFP) API 开发应用程序的最佳做法。

  • 使用动态会话。

    许多应用程序在开始时添加筛选策略对象,然后在停止时删除这些对象。 通过使用动态会话,可以保证即使应用程序崩溃,也会删除这些对象。 此外,只需在停止时关闭引擎句柄比单独调用以删除每个对象更有效。

  • 可以正常处理事务超时,或者将会话 txnWaitTimeoutInMSec 设置为无限,以防止超时。

    即使不使用显式事务,大多数调用仍会在隐式事务下执行,因此可能会超时。

  • 使用显式事务将相关的添加或删除操作合并到单个事务中。

    这样可以更高效地清理错误路径中的部分结果。

  • 使用 MUI 兼容的字符串。

    所有可本地化字符串都存储在通用数据结构中: FWPM_DISPLAY_DATA0。 此结构中的字符串可以是 SHLoadIndirectString 支持的类型的间接字符串。 在任一函数返回 FWPM_DISPLAY_DATA0 结构之前,间接字符串将使用调用方的区域设置解析为指定的字符串资源。

  • 将所有对象关联到提供程序。

    在系统上安装多个提供程序时,诊断工具可以更轻松地确定谁添加了哪些内容。

  • 将筛选器添加到你自己的子图层。

    命中子层中的终止筛选器后,将不评估该子图层中的更多筛选器。 因此,如果将筛选器添加到与另一个提供程序相同的子层中,可能会阻止调用彼此的筛选器,从而导致意外结果。

  • 使用应用程序层强制 (ALE) ,而不是面向数据包的筛选。

    数据包层的筛选速度缓慢。

  • 在生成 ICMP 错误和 RST 事件之前对其进行筛选。

    这比在生成这些事件后筛选这些事件更高效。

  • 在流/数据报数据层而不是传输层执行数据包检查。

    这适用于开发标注。 有关详细信息,请参阅 Windows 驱动程序工具包 (WDK) 中的 标注驱动程序编程注意事项

  • 使用复杂筛选器时,请考虑性能影响。

    从 Windows 7 和 Windows Server 2008 R2 开始,可以使用同一字段键的多个条件创建筛选器。 这样,就可以使用更少的筛选器创建复杂的策略。 但是,此类复杂的筛选器可能会导致 WFP 筛选器引擎进行分类的性能变慢。 应进行评估以确定使用此类筛选器是否会对解决方案的整体性能产生不利影响。