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

El Windows Filtering Platform (PMA) incluye una clase auxiliar de Network Diagnostics Framework (NDF), denominada clase auxiliar Filtering Platform (FPHC). FPHC puede ayudar a identificar las causas principales de los problemas de conectividad causados por EL PMA. Los desarrolladores de firewalls 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 la API del PMA.

¿Por qué ampliar el FPHC?

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

FPHC puede identificar AL PMA como causa de un problema de conectividad. Si está disponible, FPHC también puede identificar el proveedor que creó 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 EL PMA está causando el problema de conectividad y asignar el nombre del tráfico de bloqueo del proveedor.

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

Considere una aplicación de firewall de terceros que llame a la API del PMA. Si el firewall de terceros implementa una extensión 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 FPHC puede controlar el evento de bloqueo. Una manera de que la extensión FPHC pueda controlar un evento es presentar al usuario un mensaje para desbloquear un programa mediante el firewall y, a continuación, desbloquear el programa tras la confirmación del usuario. Como alternativa, la extensión FPHC podría controlar un evento mediante la notificación al usuario del motivo por el que se bloqueó la aplicación, por ejemplo, se bloqueó una aplicación porque el firewall la consideró malware.

Acerca de los diagnósticos de PMA

Cuando se invoca NDF para diagnosticar un problema de red, se contactará con las clases auxiliares para determinar la causa del problema. Si una clase auxiliar de nivel superior determina que un error de red puede deberse a PMA, 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 evento fpHC a continuación.

Un problema de red se puede describir como un problema de conectividad que afecta a un intento de conexión determinado. Por ejemplo, es posible que el usuario haya bloqueado accidentalmente una aplicación haciendo clic accidentalmente en No permitir. A continuación, 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 a través de 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 en particular. 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 adicional.

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

Si se encuentra un evento coincidente, FPHC usa el identificador de proveedor del filtro que provocó que el evento identificara el proveedor de la regla de seguridad que bloqueó 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, a continuación, 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 FPHC debe registrarse como se describe en Registro de extensiones de clase auxiliar de NDF. Los desarrolladores que implementan 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 debe almacenarse en el registro en HKLM\System\CurrentControlSet\Control\NetDiagFxVendorNameHostDLLsHelper\\\ClassDLLHelperClassesHelper\\ClassNameMatchAttributes\.

En la tabla siguiente se muestra el atributo coincidente utilizado para identificar la hipótesis que se va a usar en los diagnósticos en el registro de eventos de PMA.

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

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

Atributos de evento 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 . Estos atributos se pasan por NDF a FPHC cuando se encuentra un evento coincidente. A su vez, se pueden pasar a extensiones FPHC.

Atributo valor de ATTRIBUTE_TYPE Descripción
GUID del proveedor AT_GUID GUID del proveedor asociado al filtro.
Timestamp AT_OCTET_STRING Búfer de tipo FILETIME que especifica la hora a la que se produjo 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 de DIAG_SOCKADDR .
RemoteAddr AT_SOCKADDR La dirección IP remota y el puerto, almacenados en una estructura de 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 la aplicación no está disponible.

Control de eventos FPHC

Antes de sugerir información de diagnóstico y reparación al usuario, una extensión 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 PMA. Estas funciones se muestran en el ejemplo Mostrar eventos de Net .

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ósticos FPHC integrados

En ausencia de una extensión 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 del estado 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 en 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 en modo de 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 credencial No se puede conectar porque la entidad de certificación raíz (CA) de este equipo no coincide con la CA raíz en el equipo remoto. Actualice el certificado raíz de confianza.
Certificado expirado El certificado usado para la autenticación IPsec ha expirado. Solicite un certificado.
Otros errores de certificado No se encontró 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 auxiliares de NDF

Registro de extensiones de clase auxiliar de NDF

Ejemplos de clases auxiliares de NDF