Рекомендации (платформа фильтрации 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, фильтры можно создавать с несколькими условиями, которые используют один ключ поля. Это позволяет создавать сложные политики с меньшим количеством фильтров. Однако такие сложные фильтры могут привести к снижению производительности для классификации подсистемы фильтров МПП. Необходимо провести оценку, чтобы определить, влияет ли использование таких фильтров на общую производительность решения.