Поделиться через


Рекомендации (платформа фильтрации Windows)

В следующем списке приведены рекомендации по разработке приложений с помощью API платформы фильтрации Windows (WFP).

  • Используйте динамические сеансы.

    Многие приложения добавляют объекты политики фильтрации при запуске, а затем удаляют эти объекты при остановке. Используя динамический сеанс, вы гарантируете, что эти объекты будут удалены даже в случае сбоя приложения. Кроме того, простое закрытие дескриптора подсистемы при остановке является более эффективным, чем выполнение отдельных вызовов для удаления каждого объекта.

  • Либо обрабатывайте время ожидания транзакций корректно, либо задайте для сеанса txnWaitTimeoutInMSec бесконечное значение, чтобы предотвратить истечение времени ожидания.

    Даже если вы не используете явные транзакции, большинство вызовов по-прежнему выполняются в рамках неявной транзакции и, следовательно, может избежать истечения времени ожидания.

  • Используйте явные транзакции для объединения связанных операций добавления или удаления в одну транзакцию.

    Это более эффективно и упрощает очистку частичных результатов в путях ошибок.

  • Используйте строки, совместимые с MUI.

    Все локализуемые строки хранятся в общей структуре данных: FWPM_DISPLAY_DATA0. Строки в этой структуре могут быть непрямой строкой типа, поддерживаемого SHLoadIndirectString. Перед возвращением любой из функций структуры FWPM_DISPLAY_DATA0 непрямые строки разрешаются в указанный строковый ресурс с помощью языкового стандарта вызывающего объекта.

  • Свяжите все объекты с поставщиком.

    Если в системе установлено несколько поставщиков, средства диагностики могут легко определить, кто что добавил.

  • Добавьте фильтры в собственный подслой.

    После нажатия завершающего фильтра в подслое больше не оцениваются фильтры в этом подслое. Таким образом, если добавить фильтры в тот же подслой, что и другой поставщик, вы можете запретить вызов фильтров друг друга, что приведет к непредвиденным результатам.

  • Используйте применение прикладного уровня (ALE), а не пакетную фильтрацию.

    Фильтрация на уровне пакетов выполняется медленно.

  • Фильтрация ошибок ICMP и событий RST перед их созданием.

    Это более эффективно, чем фильтрация этих событий после их создания.

  • Проверка пакетов выполняется на уровне данных Stream/Datagram, а не на транспортном уровне.

    Это относится к разработке выносок. Дополнительные сведения см. в статье Рекомендации по программированию драйверов выносок в комплекте драйверов Windows (WDK).

  • Учитывайте влияние на производительность при использовании сложных фильтров.

    Начиная с Windows 7 и Windows Server 2008 R2, фильтры можно создавать с несколькими условиями, которые используют один ключ поля. Это позволяет создавать сложные политики с меньшим количеством фильтров. Однако такие сложные фильтры могут привести к снижению производительности для классификации подсистемы фильтров МПП. Необходимо провести оценку, чтобы определить, влияет ли использование таких фильтров на общую производительность решения.