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:
- 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. 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 |