Compartir a través de


Función FwpmFilterAdd0 (fwpmu.h)

La función FwpmFilterAdd0 agrega un nuevo objeto de filtro al sistema.

Sintaxis

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

Parámetros

[in] engineHandle

Tipo: HANDLE

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

Tipo: FWPM_FILTER0*

Objeto de filtro que se va a agregar.

[in, optional] sd

Tipo: SECURITY_DESCRIPTOR

Información de seguridad sobre el objeto de filtro.

[out, optional] id

Tipo: UINT64*

Identificador en tiempo de ejecución de este filtro.

Valor devuelto

Tipo: DWORD

Código o valor devuelto Descripción
ERROR_SUCCESS
0
El filtro se agregó correctamente.
ERROR_INVALID_SECURITY_DESCR
0x8007053A
La estructura del descriptor de seguridad no es válida. O bien, una condición de filtro contiene un descriptor de seguridad en formato absoluto.
FWP_E_CALLOUT_NOTIFICATION_FAILED
0x80320037
El autor de la llamada agregó un filtro de llamada y la llamada devolvió un error de su rutina de notificación.
código de error FWP_E_*
0x80320001: 0x80320039
Error específico de la Plataforma de filtrado de Windows (PMA). Consulte Códigos de error de PMA para obtener más información.
RPC_* código de error*
0x80010001: 0x80010122
Error al comunicarse con el motor de firewall remoto o local.

Comentarios

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 autor de la llamada, 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 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*.

Nota

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 de 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 que la BFE finaliza la inicialización. Los objetos persistentes se agregan cuando se inicia la BFE.

No se puede llamar a esta función desde dentro de una transacción de solo lectura. Se producirá un error con FWP_E_INCOMPATIBLE_TXN. Consulte Administración de objetos para obtener más información sobre las transacciones.

El autor de la llamada necesita los siguientes derechos de acceso:

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. Para obtener más información, vea NOMBRES DE Version-Independent DE PMA y versiones específicas de Windows dirigidas a destinatarios.

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 Value
Cliente mínimo compatible Windows Vista [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2008 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado fwpmu.h
Library Fwpuclnt.lib
Archivo DLL Fwpuclnt.dll

Consulte también

FWPM_FILTER0

Funciones de administración

Funciones de PMA