Поделиться через


Функция FwpmFilterAdd0 (fwpmu.h)

Функция FwpmFilterAdd0 добавляет в систему новый объект фильтра.

Синтаксис

DWORD FwpmFilterAdd0(
  [in]            HANDLE               engineHandle,
  [in]            const FWPM_FILTER0   *filter,
  [in, optional]  PSECURITY_DESCRIPTOR sd,
  [out, optional] UINT64               *id
);

Параметры

[in] engineHandle

Тип: HANDLE

Дескриптор открытого сеанса для подсистемы фильтрации. Вызовите FwpmEngineOpen0 , чтобы открыть сеанс для подсистемы фильтрации.

[in] filter

Тип: FWPM_FILTER0*

Добавляемый объект фильтра.

[in, optional] sd

Тип: SECURITY_DESCRIPTOR

Сведения о безопасности объекта фильтра.

[out, optional] id

Тип: UINT64*

Идентификатор среды выполнения для этого фильтра.

Возвращаемое значение

Тип: DWORD

Возвращаемый код/значение Описание
ERROR_SUCCESS
0
Фильтр успешно добавлен.
ERROR_INVALID_SECURITY_DESCR
0x8007053A
Недопустимая структура дескриптора безопасности. Или условие фильтра содержит дескриптор безопасности в абсолютном формате.
FWP_E_CALLOUT_NOTIFICATION_FAILED
0x80320037
Вызывающий объект добавил фильтр выноски, и выноска вернула ошибку из своей процедуры уведомлений.
Код ошибки FWP_E_*
0x80320001 — 0x80320039
Ошибка, определяемая платформой фильтрации Windows (WFP). Дополнительные сведения см. в разделе Коды ошибок ВПП .
Код ошибки RPC_*
0x80010001 — 0x80010122
Сбой связи с подсистемой удаленного или локального брандмауэра.

Комментарии

FwpmFilterAdd0 добавляет фильтр к указанному подслою на каждом уровне фильтрации в системе.

Некоторые поля в структуре FWPM_FILTER0 назначаются системой, а не вызывающим, и игнорируются в вызове FwpmFilterAdd0.

Если вызывающий объект предоставляет дескриптор безопасности NULL , система назначит дескриптор безопасности по умолчанию.

Чтобы заблокировать подключения к определенным расположениям, добавьте фильтр FWP_ACTION_BLOCK , указывающий локальный адрес на уровне FWPM_LAYER_ALE_AUTH_CONNECT_V* , или добавьте фильтр FWP_ACTION_BLOCK без указания локального адреса на уровне FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V*.

Примечание

Если локальный адрес указан на уровне назначения ресурсов, неявная привязка будет выполнена успешно, так как адрес, тип адреса и порт могут вернуться в качестве FWP_EMPTY.

Структура FWPM_FILTER0 может помечать фильтр как фильтр времени загрузки или постоянный фильтр. Фильтры времени загрузки добавляются в базовый механизм фильтрации (BFE) при запуске драйвера TCP/IP и удаляются после завершения инициализации BFE. Постоянные объекты добавляются при запуске BFE.

Эту функцию нельзя вызвать из транзакции, доступной только для чтения. При FWP_E_INCOMPATIBLE_TXN произойдет сбой. Дополнительные сведения о транзакциях см. в разделе Управление объектами.

Вызывающему объекту требуются следующие права доступа:

Дополнительные сведения см. в разделе контроль доступа.

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

  • Вызовите FwpsCalloutRegister0 (описано в комплекте драйверов Windows (WDK)), чтобы зарегистрировать выноску в обработчике фильтров.
  • Вызовите FwpmCalloutAdd0 , чтобы добавить выноску в систему.
  • Вызовите FwpmFilterAdd0 , чтобы добавить фильтр, который ссылается на выноску в систему.

По умолчанию фильтры, ссылающиеся на выноски, которые были добавлены, но еще не зарегистрированы в обработчике фильтров, обрабатываются как блочные фильтры.

FwpmFilterAdd0 — это конкретная реализация FwpmFilterAdd. Дополнительные сведения см. в разделах ИМЕНА Version-Independent ВПП и Выбор конкретных версий Windows .

Примеры

В следующем примере C++ показано, как инициализировать и добавить фильтр с помощью FwpmFilterAdd0 ,
в частности, блокирует трафик по IP-адресу версии 4 для всех приложений.


// Add filter to block traffic on IP V4 for all applications. 
//
FWPM_FILTER0      fwpFilter;
FWPM_SUBLAYER0    fwpFilterSubLayer;  

RtlZeroMemory(&fwpFilter, sizeof(FWPM_FILTER0));

fwpFilter.layerKey = FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V4;
fwpFilter.action.type = FWP_ACTION_BLOCK;

if (&fwpFilterSubLayer.subLayerKey != NULL)
    fwpFilter.subLayerKey = fwpFilterSubLayer.subLayerKey;

fwpFilter.weight.type = FWP_EMPTY; // auto-weight.
fwpFilter.numFilterConditions = 0; // this applies to all application traffic
fwpFilter.displayData.name = L"Receive/Accept Layer Block";
fwpFilter.displayData.description = L"Filter to block all inbound connections.";

printf("Adding filter to block all inbound connections.\n");
result = FwpmFilterAdd0(engineHandle, &fwpFilter, NULL, NULL);

if (result != ERROR_SUCCESS)
    printf("FwpmFilterAdd0 failed. Return value: %d.\n", result);
else
    printf("Filter added successfully.\n");

Требования

Требование Значение
Минимальная версия клиента Windows Vista [только классические приложения]
Минимальная версия сервера Windows Server 2008 [только классические приложения]
Целевая платформа Windows
Header fwpmu.h
Библиотека Fwpuclnt.lib
DLL Fwpuclnt.dll

См. также раздел

FWPM_FILTER0

Функции управления

Функции МПП