Функция 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 произойдет сбой. Дополнительные сведения о транзакциях см. в разделе Управление объектами.
Вызывающему объекту требуются следующие права доступа:
- FWPM_ACTRL_ADD доступ к контейнеру фильтра
- FWPM_ACTRL_ADD_LINK доступ к поставщику (при наличии)
- FWPM_ACTRL_ADD_LINK доступ к соответствующему уровню
- FWPM_ACTRL_ADD_LINK доступ к соответствующему подслою
- FWPM_ACTRL_ADD_LINK доступ к выноске (если таковой есть)
- FWPM_ACTRL_ADD_LINK доступ к контексту поставщика (если таковой имеется).
Дополнительные сведения см. в разделе контроль доступа.
Чтобы добавить фильтр, ссылающийся на выноску, вызовите функции в следующем порядке.
- Вызовите 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 |