Leer en inglés

Compartir a través de


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

Código y valor devueltos 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.
código de error RPC_*
0x80010001: 0x80010122
Error al comunicarse con el motor de firewall remoto o local.
otros códigos NTSTATUS Error.

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:

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

Consulte también