Расширяемый вспомогательный класс платформы фильтрации Windows

Платформа фильтрации Windows (МПП) включает вспомогательный класс Платформы диагностики сети (NDF), называемый вспомогательным классом платформы фильтрации (FPHC). FPHC может помочь определить первопричины проблем с подключением, вызванных МПП. Сторонние разработчики брандмауэра могут реализовать собственные вспомогательные классы NDF. Расширяемость FPHC позволяет вызывать эти сторонние вспомогательные классы во время диагностика.

В этом разделе предполагается знакомство с API МПП.

Почему расширение FPHC?

Все разработчики, которые пишут приложения, вызывающие API МПП, должны писать вспомогательный класс NDF, расширяющий FPHC.

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

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

Рассмотрим стороннее приложение брандмауэра, которое вызывает API МПП. Если сторонний брандмауэр реализует расширение FPHC, пользовательские действия можно реализовать для обработки проблем с подключением, выявленных NDF. Когда NDF диагностировать, что приложение было заблокировано сторонним брандмауэром, расширение FPHC может обрабатывать событие блокировки. Один из способов, которым может обрабатываться расширение FPHC, заключается в том, чтобы предоставить пользователю запрос на разблокировку программы с помощью брандмауэра, а затем разблокировать программу при подтверждении пользователя. Кроме того, расширение FPHC может обрабатывать событие, уведомляя пользователя о причине блокировки приложения, например приложение было заблокировано, так как оно считалось вредоносным по брандмауэру.

О диагностике МПП

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

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

Последнее событие в журналах событий МПП, которые соответствуют атрибутам, выбирается как соответствующее сетевой проблеме. Если события сопоставления не найдены и время, когда событие произошло в журнале ПППП, FPHC указывает на NDF, что это работоспособно. Если события сопоставления не найдены, а журналы МПП не включают время возникновения события, FPHC возвращает неопределенное состояние в NDF.

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

Регистрация вспомогательных классов

Расширение FPHC должно быть зарегистрировано, как описано в разделе "Регистрация вспомогательных расширений NDF". Разработчики, реализующие вспомогательный класс, должны зарегистрировать свои расширения, чтобы гарантировать, что расширение вызывается NDF при необходимости. Соответствующий атрибут, описанный ниже, должен храниться в реестре в разделе HKLM\System\CurrentControlSet\Control\NetDiagFx\VendorName\HostDLLs\Helper Class\HelperClasses Helper Class\MatchAttributes.\

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

Имя. Тип Описание
ProviderID REG_SZ GUID расширения FPHC. Это значение должно совпадать с ИДЕНТИФИКАТОРом GUID поставщика МПП.
Эта строка учитывает регистр. Он должен храниться в реестре в верхнем регистре с заключиющими фигурными скобками и дефисами. Например, {C200E360-38C5-11CE-AE62-08002B2B2B79EF} является допустимым идентификатором поставщика.

Когда Идентификатор поставщика фильтра блокировки совпадает с зарегистрированным вспомогательным классом, FPHC сообщает NDF вызвать вспомогательный класс, тем самым расширяя возможности диагностики FPHC.

Атрибуты событий FPHC

В следующей таблице перечислены атрибуты событий, связанные с каждым соответствующим событием. Каждый атрибут события хранится в HELPER_ATTRIBUTE структуре. Эти атрибуты передаются NDF в FPHC при обнаружении соответствующего события. Они, в свою очередь, могут передаваться в расширения FPHC.

Атрибут значение ATTRIBUTE_TYPE Description
GUID поставщика AT_GUID GUID поставщика, связанного с фильтром.
Метка времени AT_OCTET_STRING Буфер типа FILETIME, указывающий время, в течение которого произошло событие. Эта метка времени может использоваться для уникальной идентификации события.
ipProtocol AT_UINT32 Протокол транспортного слоя в формате UINT8.
LocalAddr AT_SOCKADDR Локальный IP-адрес и порт, хранящиеся в структуре DIAG_SOCKADDR .
RemoteAddr AT_SOCKADDR Удаленный IP-адрес и порт, хранящиеся в структуре DIAG_SOCKADDR .
userId AT_OCTET_STRING Буфер идентификатора безопасности типа, представляющий идентификатор пользователя. Если идентификатор пользователя имеет длину 0, идентификатор безопасности недоступен.
appId AT_STRING Буфер, в который хранится полученный идентификатор приложения. Если appId имеет значение L", идентификатор приложения недоступен.

Обработка событий FPHC

Прежде чем предлагать сведения о диагностике и восстановлении для пользователя, расширение FPHC должно собирать больше данных, чем предоставляется уведомлениями FPHC. Эти данные можно получить из функций управления событиями МПП. Эти функции показаны в примере отображения событий Net .

Более подробный пример управления событиями включен в пакет SDK. Исходный код для примера можно найти в расположении установки пакета SDK в разделе C:\Program Files\Microsoft SDKs\Windows\<version number>\Samples\NetDs\WFP\DiagEvents. Пакет SDK для Windows Vista доступен в Центре загрузки.

Встроенная диагностика FPHC

В отсутствие расширения FPHC FPHC может диагностировать сценарии, перечисленные ниже. Большинство сбоев подключения, диагностированных FPHC, возникают из-за того, что брандмауэры блокируют трафик. Сценарии IPsec менее распространены.

В следующей таблице показаны некоторые сценарии, вызывающие сбои подключения, которые могут быть диагностированы FPHC, а также описание и восстановление данных, передаваемых в NDF.

Сценарий Описание низкой работоспособности Сведения о восстановлении
Удаление брандмауэра Параметры брандмауэра на этом компьютере блокируют подключение. Проверьте параметры брандмауэра.
Сбой основного режима Невозможно подключиться из-за несоответствия политики безопасности IPsec. Обратитесь к владельцу политики IPsec.
Сбой быстрого режима Невозможно подключиться из-за несоответствия политики безопасности IPsec. Обратитесь к владельцу политики IPsec.
Сбой пользовательского режима Невозможно подключиться из-за несоответствия политики безопасности IPsec. Обратитесь к владельцу политики IPsec.
Сбой учетных данных Невозможно подключиться, так как корневой центр сертификации (ЦС) на этом компьютере не соответствует корневому ЦС на удаленном компьютере. Обновите доверенный корневой сертификат.
Истек срок действия сертификата Срок действия сертификата, используемого для проверки подлинности IPsec, истек. Запрос сертификата.
Другие сбои сертификата Допустимый сертификат не найден для проверки подлинности IPsec. Запрос сертификата.
Сбой Kerberos Компьютер не является частью этого домена. Присоединение этого компьютера к домену.
Предварительный ключ Сброс предварительно общих ключей. Сброс предварительно общих ключей.

Платформа фильтрации Windows

Проектирование расширений вспомогательных классов NDF

Регистрация расширений вспомогательных классов NDF

Примеры вспомогательных классов NDF