Типы выносок
С МПП можно использовать следующие типы выносок:
Встроенный выноска проверки
Этот тип выноски всегда возвращает FWP_ACTION_CONTINUE из функции classifyFn и не изменяет сетевой трафик каким-либо образом. Выноска, которая собирает статистику сети, является примером этого типа выноски.
Для этого типа выноски тип действия фильтра (указанный элементом type структуры FWPS_ACTION0) должен иметь значение FWP_ACTION_CALLOUT_INSPECTION.
Внеполосная проверка выноски
Этот тип выноски не изменяет сетевой трафик. Вместо этого он откладывает проверку за пределами функции classifyFn путем ожидания указанных данных, а затем повторного ввода данных в стек TCP/IP с одной из функций внедрения пакетов. Ожидание реализуется путем первого клонирования указанных данных, а затем возвращая FWP_ACTION_BLOCK из функции classifyFn с набором FWPS_CLASSIFY_OUT_FLAG_ABSORB битов.
Выноска встроенного изменения
Этот тип выноски изменяет сетевой трафик, сначала делая клон указанных данных, а затем изменяя клон, и, наконец, внедряя измененный клон обратно в стек TCP/IP из функции classifyFn . Этот тип выноски также возвращает FWP_ACTION_BLOCK из функции classifyFn, которая имеет FWPS_CLASSIFY_OUT_FLAG_ABSORB битовый набор.
Тип действия фильтра для этого типа выноски должен иметь значение FWP_ACTION_CALLOUT_TERMINATING.
Внеполновые выноски изменений
Этот тип выноски сначала ссылается на указанный пакет с помощью функции FwpsReferenceNetBufferList0 , которая имеет параметр intentToModify с значением TRUE. Затем выноска возвращает FWP_ACTION_BLOCK с FWPS_CLASSIFY_OUT_FLAG_ABSORB битом из функции classifyFn. Когда пакет готов к изменению вне классификацииFn, выноска клонирует указанный пакет (как только он клонирован, исходный пакет может быть разоменован). Затем выноска изменяет клон и внедряет измененный пакет обратно в стек TCP/IP.
Тип действия фильтра для этого типа выноски должен иметь значение FWP_ACTION_CALLOUT_TERMINATING.
Выноска перенаправления
Дополнительные сведения об этом типе выноски см. в разделе "Использование привязки" или "Подключение перенаправления".
Существует два типа выносок перенаправления:
- Выноска перенаправления привязки позволяет драйверу выноски изменить локальный адрес и локальный порт сокета.
- Выноска перенаправления подключения позволяет драйверу выноски изменить удаленный адрес и удаленный порт подключения.
Тип действия фильтра для этого типа выноски должен иметь значение FWP_ACTION_PERMIT.
Дополнительные сведения о FWPS_CLASSIFY_OUT_FLAG_ABSORB см. в FWPS_CLASSIFY_OUT0. Этот флаг недействителен на любом уровне отмены МПП. Возврат FWP_ACTION_BLOCK с набором флагов FWPS_CLASSIFY_OUT_FLAG_ABSORB из функции classifyFn приводит к тому, что пакет будет автоматически удален таким образом, чтобы пакет не ударил ни один из уровней отмены МПП, ни приведет к созданию событий аудита.
Хотя клонированные клонированные списки буферов можно изменить, например путем добавления или удаления сетевых буферов или многомерных выражений или обоих, выноски должны отменить такие изменения перед вызовом функции FwpsFreeCloneNetBufferList0 .
Чтобы сосуществовать с другими выносками, выполняющими проверку пакетов, изменение пакета или перенаправление подключений, прежде чем пакет будет отправлен с помощью механизма ссылки/клона-drop-reinject, выноска должна "жестко"удалить исходный пакет, очищая флаг FWPS_RIGHT_ACTION_WRITE в элементе прав структуры FWPS_CLASSIFY_OUT0, возвращаемой функцией classifyFn. Если флаг FWPS_RIGHT_ACTION_WRITE задан при вызове классифицируемогоFn (что означает, что пакет может быть записан, а затем переопределен или изменен), выноска не должна указывать на указание и не должна изменять текущий тип действия; и она должна ожидать внедрения клона более высокого веса, который может быть изменен.
Флаг FWPS_RIGHT_ACTION_WRITE должен быть задан всякий раз, когда выноска задается классификацией. Драйвер выноски должен проверить флаг FWPS_RIGHT_ACTION_WRITE , чтобы проверить права выноски, чтобы вернуть действие. Если этот флаг не задан, выноска по-прежнему может вернуть действие FWP_ACTION_BLOCK для вето на действие FWP_ACTION_PERMIT, возвращенное предыдущим выноской. В примере, приведенном в разделе "Использование выноски для глубокой проверки", функция просто завершает работу, если флаг не задан.
Функция FwpsPendOperation0 используется для записных пакетов, поступающих из слоев фильтрации FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_XXX, FWPM_LAYER_ALE_AUTH_LISTEN_XXXX или FWPM_LAYER_ALE_AUTH_CONNECT_XXX.
Функция FwpsPendClassify0 используется для записных пакетов, поступающих из следующих слоев фильтрации во время выполнения:
FWPS_LAYER_ALE_ENDPOINT_CLOSURE_V4 FWPS_LAYER_ALE_ENDPOINT_CLOSURE_V6 FWPS_LAYER_ALE_CONNECT_REDIRECT_V4 FWPS_LAYER_ALE_CONNECT_REDIRECT_V6 FWPS_LAYER_ALE_BIND_REDIRECT_V4 FWPS_LAYER_ALE_BIND_REDIRECT_V6