Función FwpmFilterAdd0 (fwpmk.h)
La función FwpmFilterAdd0 agrega un nuevo objeto de filtro al sistema.
Sintaxis
NTSTATUS FwpmFilterAdd0(
[in] HANDLE engineHandle,
[in] const FWPM_FILTER0 *filter,
[in, optional] PSECURITY_DESCRIPTOR sd,
[out, optional] UINT64 *id
);
Parámetros
[in] engineHandle
Identificador de una sesión abierta en el motor de filtro. Llame a FwpmEngineOpen0 para abrir una sesión en el motor de filtro.
[in] filter
Objeto de filtro que se va a agregar.
[in, optional] sd
Información de seguridad sobre el objeto de filtro.
[out, optional] id
Identificador en tiempo de ejecución de este filtro.
Valor devuelto
Observaciones
FwpmFilterAdd0 agrega el filtro a la subcapa especificada en cada capa de filtrado del sistema.
El sistema asigna algunos campos de la estructura FWPM_FILTER0, no el llamador, y se omiten en la llamada a FwpmFilterAdd0.
Si el autor de la llamada proporciona un descriptor de seguridad NULL, el sistema asignará un descriptor de seguridad predeterminado.
Para bloquear las conexiones a ubicaciones concretas, agregue un filtro de FWP_ACTION_BLOCK especificando la dirección local en la capa de FWPM_LAYER_ALE_AUTH_CONNECT_V* o agregue un filtro de FWP_ACTION_BLOCK sin especificar la dirección local en la capa FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V* .
Si se especifica una dirección local en la capa de asignación de recursos, un enlace implícito se realizará correctamente porque la dirección, el tipo de dirección y el puerto pueden volver como FWP_EMPTY.
La estructura FWPM_FILTER0 puede etiquetar un filtro como filtro persistente o en tiempo de arranque. Los filtros en tiempo de arranque se agregan al motor de filtrado base (BFE) cuando se inicia el controlador TCP/IP y se quitan una vez finalizada la inicialización de BFE. Los objetos persistentes se agregan cuando se inicia el BFE.
No se puede llamar a esta función desde dentro de una transacción de solo lectura, se produce un error con FWP_E_INCOMPATIBLE_TXN. Consulte de administración de objetos para obtener más información sobre las transacciones.
El autor de la llamada necesita los siguientes derechos de acceso:
- FWPM_ACTRL_ADD acceso al contenedor del filtro
- FWPM_ACTRL_ADD_LINK acceso al proveedor (si existe)
- FWPM_ACTRL_ADD_LINK acceso a la capa aplicable
- FWPM_ACTRL_ADD_LINK acceso a la subcapa aplicable
- FWPM_ACTRL_ADD_LINK acceso a la llamada (si existe)
- FWPM_ACTRL_ADD_LINK acceso al contexto del proveedor (si existe).
Consulte access Control para obtener más información.
Para agregar un filtro que haga referencia a una llamada, invoque las funciones en el orden siguiente.
- Llame a FwpsCalloutRegister0 (documentado en el Kit de controladores de Windows (WDK) para registrar la llamada con el motor de filtro.
- Llame a fwpmCalloutAdd0 para agregar la llamada al sistema.
- Llame a FwpmFilterAdd0 para agregar el filtro que hace referencia a la llamada al sistema.
De forma predeterminada, los filtros que hacen referencia a las llamadas que se han agregado pero que aún no se han registrado con el motor de filtros se tratan como filtros de bloque.
fwpmFilterAdd0 es una implementación específica de FwpmFilterAdd. Consulta nombres Version-Independent DEL PMA y destinatarios de versiones específicas de Windows para obtener más información.
Ejemplos
En el siguiente ejemplo de C++ se muestra cómo inicializar y agregar un filtro mediante FwpmFilterAdd0 que bloquea específicamente el tráfico en IP V4 para todas las aplicaciones.
// 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");
Requisitos
Requisito | Valor |
---|---|
cliente mínimo admitido | Disponible a partir de Windows Vista. |
de la plataforma de destino de |
Universal |
encabezado de |
fwpmk.h |
biblioteca de |
fwpkclnt.lib |
irQL | <= PASSIVE_LEVEL |