API ВПП
API платформы фильтрации Windows (WFP) состоит из следующих компонентов.
Компонент | Описание | Файлы заголовков |
---|---|---|
API выносок (FWPS)${REMOVE}$ |
Типы данных , используемые выносками. Примечание Эти типы данных описаны в пакете средств разработки драйверов Microsoft Windows (DDK). |
fwpstypes.idl |
Функции и перечислимые типы , используемые для реализации выносок. Примечание Эти функции и перечисленные типы задокументированы в DDK. |
fwpsk.h |
|
API IKE/AuthIP (IKEEXT)${REMOVE}$ |
Перечисление типов и структур, используемых для управления политиками IKE и AuthIP main режиме (MM) и связями безопасности. |
iketypes.idl |
Функции , используемые для управления политиками IKE и AuthIP MM и связями безопасности. |
fwpmk.h |
|
API IPsec (IPSEC)${REMOVE}$ |
Перечисление типов и структур, используемых для управления политиками IPsec и сопоставлениями безопасности. |
ipsectypes.idl |
Функции , используемые для управления политиками IPsec и связями безопасности. |
fwpmk.h |
|
API управления (FWPM)${REMOVE}$ |
Перечисление типов и структур, используемых для управления подсистемой фильтрации. |
fwpmtypes.idl |
Функции , используемые для управления подсистемой фильтрации. Эти функции используются для выполнения следующих задач:
|
fwpmk.h |
|
Общий API (FWP) | Основные перечислимые типы и структуры , общие на платформе фильтрации Windows. |
fwptypes.idl |
Имена типов данных используются в верхнем регистре и с разделителями подчеркивания. Имя всегда начинается с префикса, который определяет группу компонентов, например FWPM_PROVIDER0.
Имена функций имеют смешанный регистр и разделены регистром. Имя всегда начинается с префикса, который идентифицирует группу компонентов, например FwpmProviderContextAdd0.
Большинство имен данных и функций заканчиваются номером версии. Файл заголовка fwpvi.h сопоставляет независимые от версии данные и имена функций с версией, подходящей для использования с заданной операционной системой. Дополнительные сведения см. в разделах ИМЕНА Version-Independent ВПП и Выбор конкретных версий Windows.
Каждый компонент не стоит отдельно. Например, политики режима main IKE (MM) определяются в компоненте IKEEXT, но хранятся в контексте поставщика и связаны с фильтром, который находится в компоненте API FWPM.
Большинство функций ВПП можно вызывать из пользовательского режима или режима ядра. Однако функции пользовательского режима возвращают значение DWORD , представляющее код ошибки Win32, тогда как функции режима ядра возвращают значение NTSTATUS , представляющее код состояния NT. В результате имена и семантика функций в пользовательском режиме и режиме ядра идентичны, а сигнатуры функций — нет. Для этого требуются отдельные заголовки пользовательского режима и режима ядра для прототипов функций. Имена файлов заголовков пользовательского режима заканчиваются на "u", а имена файлов заголовков режима ядра — на "k".
В следующей таблице перечислены файлы заголовков Win32, которые определяют функции ВПП.
Файлы заголовков | Описание |
---|---|
fwpmk.h | Прототипы функций в режиме ядра для компонентов FWPM, IPsec и IKEEXT. Доступно только в DDK. |
fwpmu.h | Прототипы функций пользовательского режима для компонентов FWPM, IPsec и IKEEXT. Доступно только в пакете sdk для Microsoft Windows. |
fwpsk.h | Прототипы функций в режиме ядра и перечисленные типы для компонента FWPS. Доступно только в DDK. |
fwpsu.h | Прототипы функций в пользовательском режиме и перечисленные типы для компонента FWPS. Доступно только в windows SDK. Примечание Перечислимые типы FWPS в пользовательском режиме идентичны перечисленным типам FWPS в режиме ядра. Следовательно, эти типы задокументированы только в DDK. Примечание Прототипы функций FWPS в пользовательском режиме идентичны прототипам функций FWPS в режиме ядра, за исключением кода возврата. Функции FWPS в пользовательском режиме возвращают DWORD, а функции FWPS в режиме ядра — NTSTATUS. Следовательно, эти функции задокументированы только в DDK. |
Все функции пользовательского режима экспортируются из fwpuclnt.dll. Все функции в режиме ядра экспортируются из fwpkclnt.sys.
Большинство типов данных FWPM, которые используются для задач управления, таких как добавление фильтров или выносок из приложения или драйвера, имеют аналоги FWPS. Типы данных FWPS используются во время фактической фильтрации сетевого трафика в контексте процедуры выноски для классификации.
Например, чтобы добавить фильтр к определенному уровню подсистемы фильтрации, программист должен использовать тип FWPM, например : filter.layerKey = FWPM_LAYER_INBOUND_IPPACKET
. Чтобы проверка, из какого слоя вызывается выноска, программист должен использовать соответствующий тип FWPS: if (inFixedValues->layerId == FWPS_LAYER_INBOUND_IPPACKET)
.
Некоторые аналоги FWPS типов данных FWPM расширяют исходные типы данных FWPM. Например, чтобы добавить условие фильтра на многих уровнях подсистемы фильтрации, программист задает filterCondition.fieldKey = FWPM_CONDITION_IP_PROTOCOL
независимо от уровня подсистемы фильтрации. Чтобы найти значение условия фильтра, программист указывает тип FWPS для определенного уровня, например . inFixedValues->incomingValue[FWPS_FIELD_ALE_FLOW_ESTABLISHED_V4_IP_PROTOCOL]
Типы данных FWPS обычно меньше, чем их аналоги FWPM. Например, идентификаторами слоя фильтрации FWPM являются ИДЕНТИФИКАТОРы GUID(16 байт), а идентификаторами слоев фильтрации FWPS являются UINT16 (16 бит). Меньший размер типов данных FWPS повышает производительность системы, так как целочисленные сравнения перевешивают сравнения GUID для трафика в режиме реального времени. Кроме того, память ядра используется эффективно, так как типы FWPS используются в ядре для управления фильтрами, в то время как типы FWPM хранятся в пользовательском режиме для управления различными уровнями.