Classe helper estendibile di Windows Filtering Platform

Windows Filtering Platform (WFP) include una classe helper NDF (Network Diagnostics Framework), denominata classe helper della piattaforma di filtro (FPHC). FPHC può aiutare a identificare le cause principali dei problemi di connettività causati dal WFP. Gli sviluppatori di firewall di terze parti possono implementare le proprie classi helper NDF. L'estendibilità FPHC consente di richiamare queste classi helper di terze parti durante la diagnostica.

Questo argomento presuppone la familiarità con l'API WFP.

Perché estendere FPHC?

Tutti gli sviluppatori che scrivono applicazioni che chiamano l'API WFP devono scrivere una classe helper NDF che estende FPHC.

FPHC può identificare il WFP come causa di un problema di connettività. Se disponibile, FPHC può anche identificare il provider che ha creato il filtro che blocca il traffico di rete. FPHC passa queste informazioni a NDF, che a sua volta può notificare all'utente che il WFP sta causando il problema di connettività e assegnare il nome del provider che blocca il traffico.

Tuttavia, FPHC non può suggerire un'azione correttiva all'utente, né può fornire il motivo per cui il filtro blocca il traffico verso l'utente. Solo un'estensione FPHC può eseguire tali attività.

Si consideri un'applicazione firewall di terze parti che chiama l'API WFP. Se il firewall di terze parti implementa un'estensione FPHC, è possibile implementare azioni personalizzate per gestire i problemi di connettività identificati da NDF. Quando NDF diagnostica che un'applicazione è stata bloccata dal firewall di terze parti, l'estensione FPHC può gestire l'evento di blocco. Un modo in cui l'estensione FPHC potrebbe gestire un evento consiste nel presentare all'utente una richiesta di sbloccare un programma usando il firewall e quindi sbloccare il programma dopo la conferma dell'utente. In alternativa, l'estensione FPHC potrebbe gestire un evento notificando all'utente il motivo per cui l'applicazione è stata bloccata, ad esempio un'applicazione è stata bloccata perché è stato considerato malware dal firewall.

Informazioni sulla diagnostica WFP

Quando NDF viene richiamato per diagnosticare un problema di rete, vengono contattate le classi helper per determinare la causa del problema. Se una classe helper di livello superiore determina che un errore di rete può essere causato dal WFP, genera un'ipotesi per FPHC in base alle informazioni disponibili. NDF passa questa ipotesi, sotto forma di diversi attributi di evento, a FPHC. Questi attributi sono descritti in dettaglio nella sezione Attributi evento FPHC di seguito.

Un problema di rete può essere descritto come un problema di connettività che interessa un tentativo di connessione specifico. Ad esempio, l'utente potrebbe aver accidentalmente bloccato un'applicazione facendo clic inavvertitamente su Non consentire. Il firewall bloccherà quindi l'associazione dell'applicazione a qualsiasi porta. L'utente, non sapendo perché l'applicazione è bloccata, può provare a diagnosticare il problema tramite un punto di ingresso offerto dall'applicazione. FPHC esaminerà i log e, se trova una corrispondenza, recupererà l'ID filtro e l'ID provider di quel particolare filtro. A questo punto, FPHC sa chi è il proprietario del filtro e passerà il processo di diagnostica alla classe helper appropriata per ulteriori diagnosi.

L'evento più recente nei registri eventi DEL WFP per trovare le corrispondenze con gli attributi è selezionato come rilevante per il problema di rete. Se non vengono trovati eventi corrispondenti e l'ora in cui si è verificato l'evento è coperto nel log WFP, FPHC indica a NDF che è integro. Se non vengono trovati eventi corrispondenti e i log DEL WFP non includono l'ora in cui si è verificato l'evento, FPHC restituisce uno stato indeterminato a NDF.

Se viene trovato un evento corrispondente, FPHC usa l'ID provider del filtro che ha causato l'identificazione del provider della regola di sicurezza che ha bloccato la connettività. FPHC verifica quindi se esiste un'estensione della classe helper per tale provider. Se ne viene trovato uno, FPHC genera un'ipotesi per tale provider e quindi NDF richiama l'estensione. L'estensione deve restituire informazioni di diagnostica e ripristino utili all'utente.

Registrazione della classe helper

Un'estensione FPHC deve essere registrata come descritto in Registrazione delle estensioni della classe helper NDF. Gli sviluppatori che implementano una classe helper devono registrare le estensioni per assicurarsi che l'estensione venga chiamata da NDF quando appropriato. L'attributo corrispondente descritto di seguito deve essere archiviato nel Registro di sistema in HKLM\System\CurrentControlSet\Control\NetDiagFx\VendorName\HostDLLs\Helper Class\HelperClasses\Helper Class Name\MatchAttributes.

La tabella seguente mostra l'attributo corrispondente usato per identificare l'ipotesi da usare nella diagnostica nel registro eventi WFP.

Nome Tipo Descrizione
ProviderID REG_SZ GUID dell'estensione FPHC. Questo valore deve essere uguale al GUID del provider WFP.
Questa stringa fa distinzione tra maiuscole e minuscole. Deve essere archiviato nel Registro di sistema in lettere maiuscole con parentesi graffe e trattini. Ad esempio, {C200E360-38C5-11CE-AE62-08002B2B79EF} è un ProviderID valido.

Quando il ProviderID di un filtro di blocco corrisponde a quello di una classe helper registrata, FPHC informa NDF di richiamare tale classe helper, estendendo così la funzionalità di diagnostica di FPHC.

Attributi evento FPHC

Nella tabella seguente sono elencati gli attributi dell'evento associati a ogni evento corrispondente. Ogni attributo di evento viene archiviato in una struttura HELPER_ATTRIBUTE. Questi attributi vengono passati da NDF a FPHC quando viene trovato un evento corrispondente. Questi possono essere passati a loro volta alle estensioni FPHC.

Attributo valore ATTRIBUTE_TYPE Descrizione
GUID del provider AT_GUID GUID del provider associato al filtro.
Timestamp: AT_OCTET_STRING Buffer di tipo FILETIME che specifica l'ora in cui si è verificato l'evento. Questo timestamp può essere usato per identificare in modo univoco un evento.
ipProtocol AT_UINT32 Protocollo del livello di trasporto, in formato UINT8.
LocalAddr AT_SOCKADDR Indirizzo IP locale e porta archiviati in una struttura DIAG_SOCKADDR.
RemoteAddr AT_SOCKADDR Indirizzo IP remoto e porta archiviati in una struttura di DIAG_SOCKADDR .
userId AT_OCTET_STRING Buffer di tipo SID che rappresenta l'id utente. Se userId è di lunghezza 0, il SID non è disponibile.
appId AT_STRING Buffer che archivia l'identificatore dell'applicazione recuperato. Se appId ha un valore L"", l'identificatore dell'applicazione non è disponibile.

Gestione degli eventi FPHC

Prima di suggerire informazioni di diagnostica e ripristino all'utente, un'estensione FPHC deve raccogliere più dati rispetto a quanto fornito dalle notifiche FPHC. Questi dati possono essere acquisiti dalle funzioni di gestione degli eventi WFP. Queste funzioni sono illustrate nell'esempio Displaying Net Events .These functions are illustrate in the Displaying Net Events sample.

Un esempio di gestione degli eventi più dettagliato è incluso nell'SDK. Il codice sorgente per l'esempio è disponibile nel percorso di installazione dell'SDK in C:\Programmi\Microsoft SDKs\Windows\<version number>\Samples\NetDs\WFP\DiagEvents. Windows Vista SDK è disponibile nell'Area download.

Diagnostica FPHC predefinita

In assenza di un'estensione FPHC, FPHC può diagnosticare gli scenari elencati di seguito. La maggior parte degli errori di connettività diagnosticati da FPHC si verifica perché i firewall bloccano il traffico. Gli scenari IPsec sono meno comuni.

La tabella seguente illustra alcuni scenari che causano errori di connettività che possono essere diagnosticati da FPHC, insieme alla descrizione e alle informazioni di ripristino passate a NDF.

Scenario Descrizione dell'integrità bassa Informazioni di ripristino
Eliminazione del firewall Le impostazioni del firewall in questo computer bloccano la connessione. Verificare le impostazioni del firewall.
Errore della modalità principale Non è possibile connettersi a causa di una mancata corrispondenza dei criteri di sicurezza IPsec. Contattare il proprietario dei criteri IPsec.
Errore in modalità rapida Non è possibile connettersi a causa di una mancata corrispondenza dei criteri di sicurezza IPsec. Contattare il proprietario dei criteri IPsec.
Errore in modalità utente Non è possibile connettersi a causa di una mancata corrispondenza dei criteri di sicurezza IPsec. Contattare il proprietario dei criteri IPsec.
Errore delle credenziali Non è possibile connettersi perché l'autorità di certificazione radice (CA) in questo computer non corrisponde alla CA radice nel computer remoto. Aggiornare il certificato radice attendibile.
Certificato scaduto Il certificato usato per l'autenticazione IPsec è scaduto. Richiedere un certificato.
Altri errori di certificato Non è stato trovato un certificato valido per l'autenticazione IPsec. Richiedere un certificato.
Errore Kerberos Il computer non fa parte di questo dominio. Aggiungere il computer a un dominio.
Chiave precondivisa Reimpostare le chiavi precondivise. Reimpostare le chiavi precondivise.

Piattaforma filtro Windows

Progettazione di estensioni della classe helper NDF

Registrazione delle estensioni della classe helper NDF

Esempi di classi helper NDF