Clase de aplicación auxiliar extensible de la plataforma de filtrado de Windows

La Plataforma de filtrado de Windows (WFP) incluye una clase auxiliar de Marco de diagnóstico de redes (NDF), denominada clase auxiliar Plataforma de filtrado (FPHC). FPHC puede ayudar a identificar las causas principales de los problemas de conectividad causados por WFP. Los desarrolladores de firewall de terceros pueden implementar sus propias clases auxiliares de NDF. La extensibilidad de FPHC permite invocar estas clases auxiliares de terceros durante el diagnóstico.

En este tema se supone que está familiarizado con WFP API.

¿Por qué extender FPHC?

Todos los desarrolladores que escriben aplicaciones que llaman a WFP API deben escribir una clase auxiliar de NDF que extienda FPHC.

FPHC puede identificar WFP como causa de un problema de conectividad. Si está disponible, FPHC también puede identificar el proveedor que ha creado el filtro que bloquea el tráfico de red. FPHC pasa esta información a NDF que, a su vez, puede notificar al usuario que WFP es la causa del problema de conectividad y proporcionar el nombre del tráfico de bloqueo del proveedor.

Pero FPHC no puede sugerir una acción correctiva al usuario, ni puede proporcionar el motivo por el que el filtro bloquea el tráfico para el usuario. Solo una extensión de FPHC puede realizar esas tareas.

Considere la posibilidad de usar una aplicación de firewall de terceros que llame a WFP API. Si el firewall de terceros implementa una extensión de FPHC, se pueden implementar acciones personalizadas para controlar los problemas de conectividad identificados por NDF. Cuando NDF diagnostica que el firewall de terceros ha bloqueado una aplicación, la extensión de FPHC puede controlar el evento de bloqueo. Una manera de que la extensión de FPHC pueda controlar un evento consiste en presentar al usuario una solicitud para desbloquear un programa mediante el firewall y, después, desbloquear el programa tras la confirmación del usuario. Como alternativa, la extensión de FPHC podría controlar un evento mediante la notificación al usuario del motivo por el que se ha bloqueado la aplicación, por ejemplo porque el firewall la ha considerado malware.

Acerca de los diagnósticos de WFP

Cuando se invoca NDF para diagnosticar un problema de red, las clases auxiliares se contactan para determinar la causa del problema. Si una clase auxiliar de nivel superior determina que un error de red puede deberse a WFP, genera una hipótesis para FPHC en función de la información disponible. NDF pasa esta hipótesis, en forma de varios atributos de evento, a FPHC. Estos atributos se describen en detalle en la sección Atributos de eventos de FPHC siguiente.

Un problema de red se puede describir como un problema de conectividad que afecta a un intento de conexión determinado. Por ejemplo, el usuario puede haber bloqueado accidentalmente una aplicación al hacer clic en No permitir. Después, el firewall impedirá que la aplicación se enlace a cualquier puerto. El usuario, sin saber por qué se bloquea la aplicación, puede intentar diagnosticar el problema desde un punto de entrada ofrecido por la aplicación. FPHC examinará los registros y, si encuentra una coincidencia, recuperará el identificador de filtro y el identificador de proveedor de ese filtro determinado. En este momento, FPHC sabe quién es el propietario de ese filtro y entregará el proceso de diagnóstico a la clase auxiliar adecuada para un diagnóstico posterior.

El evento más reciente de los registros de eventos de WFP que coincide con los atributos se selecciona como relevante para el problema de red. Si no se encuentra ningún evento coincidente y la hora a la que se ha producido el evento se incluye en el registro de WFP, FPHC indica a NDF que es correcto. Si no se encuentra ningún evento coincidente y los registros de WFP no incluyen la hora a la que se ha producido el evento, FPHC devuelve un estado indeterminado a NDF.

Si se encuentra un evento coincidente, FPHC usa el identificador de proveedor del filtro que lo ha provocado para identificar el proveedor de la regla de seguridad que bloqueaba la conectividad. Después, FPHC comprueba si existe una extensión de clase auxiliar para ese proveedor. Si se encuentra uno, FPHC genera una hipótesis para ese proveedor y, después, NDF invoca la extensión. La extensión debe devolver información útil de diagnóstico y reparación al usuario.

Registro de clases auxiliares

Una extensión de FPHC debe registrarse como se describe en Registro de extensiones de clase auxiliar de NDF. Los desarrolladores que implementen una clase auxiliar deben registrar sus extensiones para asegurarse de que NDF llama a la extensión cuando corresponda. El atributo coincidente que se describe a continuación se debe almacenar en el Registro en HKLM\System\CurrentControlSet\Control\NetDiagFx\VendorName\HostDLLs\Helper Class DLL\HelperClasses\Helper Class Name\MatchAttributes.

En la tabla siguiente se muestra el atributo coincidente que se usa para identificar la hipótesis que se va a utiliza en los diagnósticos del registro de eventos de WFP.

Nombre Tipo Descripción
ProviderID REG_SZ GUID de la extensión de FPHC. Este valor debe ser el mismo que el GUID del proveedor de WFP.
Esta cadena distingue mayúsculas y minúsculas. Se debe almacenar en el Registro en mayúsculas con llaves y guiones envolventes. Por ejemplo, {C200E360-38C5-11CE-AE62-08002B2B79EF} es un valor ProviderID válido.

Cuando el valor ProviderID de un filtro de bloqueo coincide con el de una clase auxiliar registrada, FPHC informa a NDF para invocar esa clase auxiliar, lo que amplía la funcionalidad de diagnóstico de FPHC.

Atributos de eventos de FPHC

En la tabla siguiente se enumeran los atributos de evento asociados a cada evento coincidente. Cada atributo de evento se almacena en una estructura HELPER_ATTRIBUTE. NDF pasa estos atributos a FPHC cuando se encuentra un evento coincidente. A su vez, se pueden pasar a extensiones de FPHC.

Attribute Valor ATTRIBUTE_TYPE Descripción
GUID del proveedor AT_GUID GUID del proveedor asociado al filtro.
Marca de tiempo AT_OCTET_STRING Búfer de tipo FILETIME que especifica la hora a la que se ha producido el evento. Esta marca de tiempo se puede usar para identificar de forma única un evento.
ipProtocol AT_UINT32 Protocolo de capa de transporte, en formato UINT8.
LocalAddr AT_SOCKADDR La dirección IP local y el puerto, almacenados en una estructura DIAG_SOCKADDR.
RemoteAddr AT_SOCKADDR La dirección IP remota y el puerto, almacenados en una estructura DIAG_SOCKADDR.
userId AT_OCTET_STRING Búfer de tipo SID que representa el identificador de usuario. Si userId es de longitud 0, el SID no está disponible.
appId AT_STRING Búfer que almacena el identificador de aplicación recuperado. Si appId tiene un valor de L"", el identificador de aplicación no está disponible.

Control de eventos de FPHC

Antes de sugerir información de diagnóstico y reparación al usuario, una extensión de FPHC debe recopilar más datos de los proporcionados por las notificaciones de FPHC. Estos datos se pueden adquirir de las funciones de administración de eventos de WFP. Estas funciones se muestran en el ejemplo Representación de eventos de red.

En el SDK se incluye un ejemplo de administración de eventos más detallado. El código fuente del ejemplo se puede encontrar en la ubicación de instalación del SDK en C:\Archivos de programa\Microsoft SDKs\Windows\<número de versión>\Samples\NetDs\PMA\DiagEvents. El SDK de Windows Vista está disponible en el Centro de descarga.

Diagnóstico de FPHC integrado

En ausencia de una extensión de FPHC, FPHC puede diagnosticar los escenarios que se enumeran a continuación. La mayoría de los errores de conectividad diagnosticados por FPHC se producen porque los firewalls bloquean el tráfico. Los escenarios de IPsec son menos comunes.

En la tabla siguiente se muestran algunos escenarios que provocan errores de conectividad que FPHC puede diagnosticar, junto con la descripción y la información de reparación que se pasa a NDF.

Escenario Descripción de mantenimiento bajo Información de reparación
Eliminación del firewall La configuración del firewall de este equipo bloquea la conexión. Compruebe la configuración del firewall.
Error del modo principal No se puede conectar debido a una falta de coincidencia de directiva de seguridad de IPsec. Póngase en contacto con el propietario de la directiva IPsec.
Error del modo rápido No se puede conectar debido a una falta de coincidencia de directiva de seguridad de IPsec. Póngase en contacto con el propietario de la directiva IPsec.
Error del modo usuario No se puede conectar debido a una falta de coincidencia de directiva de seguridad de IPsec. Póngase en contacto con el propietario de la directiva IPsec.
Error de credenciales No se puede conectar porque la entidad de certificación raíz (CA) de este equipo no coincide con la entidad de certificación raíz del equipo remoto. Actualice el certificado raíz de confianza.
Certificado caducado El certificado usado para la autenticación IPsec ha caducado. Solicite un certificado.
Otros errores de certificado No se ha encontrado un certificado válido para la autenticación IPsec. Solicite un certificado.
Error de Kerberos El equipo no forma parte de este dominio. Una este equipo a un dominio.
Clave previamente compartida Restablezca las claves previamente compartidas. Restablezca las claves previamente compartidas.

Plataforma de filtrado de Windows

Diseño de extensiones de clase auxiliar de NDF

Registro de extensiones de clase auxiliar de NDF

Ejemplos de clases auxiliares de NDF