Classe auxiliar extensível da plataforma de filtragem do Windows
A Plataforma para Filtros do Windows (WFP) inclui uma classe auxiliar da Estrutura de Diagnóstico de Rede (NDF), chamada de classe auxiliar da Plataforma para Filtros (FPHC). O FPHC pode ajudar a identificar as causas raiz dos problemas de conectividade causados pela WFP. Os desenvolvedores de firewall de terceiros podem implementar suas próprias classes auxiliares de NDF. A extensibilidade do FPHC permite que essas classes auxiliares de terceiros sejam invocadas durante o diagnóstico.
Este tópico pressupõe familiaridade com a API da WFP.
Por que estender o FPHC?
Todos os desenvolvedores que escrevem aplicativos que chamam a API da WFP devem escrever uma classe auxiliar NDF que estenda o FPHC.
O FPHC pode identificar a WFP como a causa de um problema de conectividade. Se disponível, o FPHC também pode identificar o provedor que criou o filtro que está bloqueando o tráfego de rede. O FPHC passa essas informações a NDF, que, por sua vez, pode notificar o usuário de que a WFP está causando o problema de conectividade e fornecer o nome do provedor que está bloqueando o tráfego.
No entanto, o FPHC não pode sugerir uma ação corretiva para o usuário, nem pode fornecer o motivo pelo qual o filtro está bloqueando o tráfego para o usuário. Somente uma extensão do FPHC pode realizar essas tarefas.
Considere um aplicativo de firewall de terceiros que chama a API da WFP. Se o firewall de terceiros implementar uma extensão FPHC, as ações personalizadas poderão ser implementadas para lidar com os problemas de conectividade identificados pela NDF. Quando a NDF diagnostica que um aplicativo foi bloqueado pelo firewall de terceiros, a extensão FPHC pode tratar o evento de bloqueio. Uma maneira de a extensão FPHC lidar com um evento é apresentar ao usuário uma solicitação para desbloquear um programa usando o firewall e, em seguida, desbloquear o programa após a confirmação do usuário. Como alternativa, a extensão FPHC poderia tratar um evento notificando o usuário sobre o motivo pelo qual o aplicativo foi bloqueado, por exemplo, um aplicativo foi bloqueado porque foi considerado malware pelo firewall.
Sobre o Diagnóstico do WFP
Quando a NDF é invocada para diagnosticar um problema de rede, as classes auxiliares são contatadas para determinar a causa do problema. Se uma classe auxiliar de nível superior determinar que uma falha de rede pode ser causada pelo PAM, ela gera uma hipótese para o FPHC com base nas informações disponíveis. A NDF passa essa hipótese, na forma de vários atributos de eventos, para o FPHC. Esses atributos são descritos em detalhes na seção Atributos de eventos do FPHC abaixo.
Um problema de rede pode ser descrito como um problema de conectividade que afeta uma tentativa de conexão específica. Por exemplo, o usuário pode ter bloqueado acidentalmente um aplicativo ao clicar inadvertidamente em Não permitir. O firewall impedirá que o aplicativo se vincule a qualquer porta. O usuário, sem saber por que o aplicativo está bloqueado, pode tentar diagnosticar o problema por meio de um ponto de entrada oferecido pelo aplicativo. O FPHC examinará os registros e, se encontrar uma correspondência, recuperará a ID do filtro e a ID do provedor desse filtro específico. Nesse momento, o FPHC sabe quem é o proprietário desse filtro e encaminhará o processo de diagnóstico para a classe auxiliar apropriada para obter mais diagnósticos.
O evento mais recente nos registros de eventos da WFP que corresponde aos atributos é selecionado como relevante para o problema de rede. Se não forem encontrados eventos correspondentes e a hora em que o evento ocorreu estiver coberta no registro da WFP, o FPHC indicará à NDF que ela está íntegra. Se não forem encontrados eventos correspondentes e os registros da WFP não incluírem a hora em que o evento ocorreu, o FPHC retornará um status indeterminado para a NDF.
Se for encontrado um evento correspondente, o FPHC usará o ID do provedor do filtro que causou o evento para identificar o provedor da regra de segurança que bloqueou a conectividade. Em seguida, o FPHC verifica se existe uma extensão de classe auxiliar para esse provedor. Se for encontrado um, o FPHC gerará uma hipótese para esse provedor e, em seguida, a NDF invocará a extensão. A extensão deve retornar informações úteis de diagnóstico e reparo para o usuário.
Registro da Classe Auxiliar
Uma extensão FPHC deve ser registrada conforme descrito em Registro de Extensões de Classe Auxiliar da NDF. Os desenvolvedores que implementam uma classe auxiliar devem registrar suas extensões para garantir que a extensão seja chamada pela NDF quando apropriado. O atributo de correspondência descrito abaixo deve ser armazenado no registro em HKLM\System\CurrentControlSet\Control\NetDiagFx\VendorName\HostDLLs\DLL da Classe Auxiliar\HelperClasses\Nome da Classe Auxiliar\MatchAttributes.
A tabela a seguir mostra o atributo de correspondência usado para identificar a hipótese a ser usada em diagnósticos no registro de eventos da WFP.
Nome | Tipo | Descrição |
---|---|---|
ID do provedor | REG_SZ | O GUID da extensão FPHC. Esse valor deve ser o mesmo que o GUID do provedor do PAM. Essa cadeia de caracteres diferencia maiúsculas de minúsculas. Ele deve ser armazenado no registro em letras maiúsculas com chaves e hifens. Por exemplo, {C200E360-38C5-11CE-AE62-08002B2B79EF} é uma ProviderID válida. |
Quando o ProviderID de um filtro de bloqueio corresponde ao de uma classe auxiliar registrada, o FPHC informa a NDF para invocar essa classe auxiliar, ampliando assim a capacidade de diagnóstico do FPHC.
Atributos do Evento FPHC
A tabela a seguir lista os atributos de evento associados a cada evento correspondente. Cada atributo de evento é armazenado em uma estrutura HELPER_ATTRIBUTE. Esses atributos são transmitidos pela NDF ao FPHC quando um evento correspondente é encontrado. Esses podem, por sua vez, ser passados para as extensões do FPHC.
Atributo | Valor ATTRIBUTE_TYPE | Descrição |
---|---|---|
GUID do provedor | AT_GUID | O GUID do provedor associado ao filtro. |
Carimbo de data/hora | AT_OCTET_STRING | Um buffer do tipo FILETIME que especifica a hora em que o evento ocorreu. Esse registro de data e hora pode ser usado para identificar um evento de forma exclusiva. |
ipProtocol | AT_UINT32 | O protocolo da camada de transporte, no formato UINT8. |
LocalAddr | AT_SOCKADDR | O endereço IP e a porta locais, armazenados em uma estrutura DIAG_SOCKADDR. |
RemoteAddr | AT_SOCKADDR | O endereço IP e a porta remotos, armazenados em uma estrutura DIAG_SOCKADDR. |
userId | AT_OCTET_STRING | Um buffer do tipo SID que representa a ID do usuário. Se userId tiver comprimento 0, o SID não estará disponível. |
appId | AT_STRING | Um buffer que armazena o identificador de aplicativo recuperado. Se appId tiver um valor de L"", o identificador do aplicativo não estará disponível. |
Tratamento de eventos do FPHC
Antes de sugerir informações de diagnóstico e reparo ao usuário, uma extensão do FPHC deve coletar mais dados do que os fornecidos pelas notificações do FPHC. Esses dados podem ser obtidos nas Funções de gerenciamento de eventos da WFP. Essas funções são demonstradas no exemplo Exibição de Eventos de Rede.
Um exemplo mais detalhado de gerenciamento de eventos está incluído no SDK. O código-fonte da amostra pode ser encontrado no local de instalação do SDK em C:\Program Files\Microsoft SDKs\Windows\<número da versão>\Samples\NetDs\WFP\DiagEvents. O SDK do Windows Vista está disponível no Centro de Download.
Diagnósticos de FPHC integrados
Na ausência de uma extensão do FPHC, o FPHC pode diagnosticar os cenários listados abaixo. A maioria das falhas de conectividade diagnosticadas pelo FPHC ocorre porque os firewalls bloqueiam o tráfego. Os cenários IPsec são menos comuns.
A tabela a seguir mostra alguns cenários que causam falhas de conectividade que podem ser diagnosticadas pelo FPHC, juntamente com a descrição e as informações de reparo passadas para a NDF.
Cenário | Descrição de baixa integridade | Informações sobre reparos |
---|---|---|
Queda do firewall | As configurações do firewall deste computador estão bloqueando a conexão. | Verifique suas configurações de firewall. |
Falha no Modo Principal | Não é possível se conectar devido a uma incompatibilidade de política de segurança IPsec. | Entre em contato com o proprietário da política IPsec. |
Falha no Modo Rápido | Não é possível se conectar devido a uma incompatibilidade de política de segurança IPsec. | Entre em contato com o proprietário da política IPsec. |
Falha no Modo de Usuário | Não é possível se conectar devido a uma incompatibilidade de política de segurança IPsec. | Entre em contato com o proprietário da política IPsec. |
Falha na Credencial | Não é possível se conectar porque a autoridade de certificação (CA) raiz deste computador não corresponde à CA raiz do computador remoto. | Atualize o certificado raiz confiável. |
Certificado Expirado | O certificado usado para a autenticação IPsec expirou. | Solicitar um certificado. |
Outras falhas de certificado | Não foi encontrado um certificado válido para a autenticação IPsec. | Solicitar um certificado. |
Falha no Kerberos | O computador não faz parte desse domínio. | Associe esse computador a um domínio. |
Chave pré-compartilhada | Redefinir as chaves pré-compartilhadas. | Redefinir as chaves pré-compartilhadas. |