Типы выносок

С МПП можно использовать следующие типы выносок:

Встроенная выноска проверки
Этот тип выноски всегда возвращает 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 . Когда пакет готов к изменению за пределами classifyFn, выноска клонирует указанный пакет (как только он клонируется, исходный пакет можно разыменовать). Затем выноска изменяет клон и внедряет измененный пакет обратно в стек 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 .

Чтобы сосуществовать с другими выносками, выполняющими проверку пакетов, изменение пакета или перенаправление подключения, перед тем как пакет будет отправлен с помощью механизма reference/clone-drop-reinject, выноска должна "жестко" удалить исходный пакет, сняв флаг FWPS_RIGHT_ACTION_WRITE в члене правструктуры FWPS_CLASSIFY_OUT0 , возвращаемой функцией classifyFn . Если флаг FWPS_RIGHT_ACTION_WRITE установлен при вызове classifyFn (это означает, что пакет может быть отправлен, а затем перепроектирован или изменен), выноска не должна содержать указания и не должна изменять текущий тип действия; и он должен дождаться выноски с более высоким весом, чтобы внедрить клон, который может быть изменен.

Флаг 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_XXX или 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