Condividi tramite


Considerazioni sulla programmazione del driver di callout

Prendere in considerazione gli argomenti seguenti quando si programma un driver di callout della piattaforma di filtro di Windows.

Modalità utente e modalità kernel

Se il filtro desiderato può essere eseguito usando la funzionalità di filtro standard incorporata in Windows Filtering Platform, i fornitori di software indipendenti (ISV) devono scrivere applicazioni di gestione in modalità utente per configurare il motore di filtro anziché scrivere driver di callout in modalità kernel. Un driver di callout in modalità kernel deve essere scritto solo quando è necessario elaborare i dati di rete in modi che non possono essere gestiti dalla funzionalità di filtro predefinita standard. Per informazioni su come scrivere un'applicazione di gestione di Windows Filtering Platform in modalità utente, vedere la documentazione di Windows Filtering Platform nella Microsoft Windows SDK.

Scelta del livello di filtro

Un driver di callout deve filtrare i dati di rete al livello di filtro più alto possibile nello stack di rete. Ad esempio, se l'attività di filtro desiderata può essere gestita a livello di flusso, non deve essere implementata a livello di rete. Per altre informazioni sulle raccomandazioni dei livelli di filtro che il driver deve usare per garantire la compatibilità con IPsec in Windows, vedere Sviluppo di IPsec-Compatible Driver callout.

Blocco del flusso al livello applicazione (ALE) Stabilito livelli

In genere, se un callout è stato aggiunto al motore di filtro in uno dei livelli di filtro stabiliti dal flusso ALE (FWPM_LAYER_ALE_FLOW_ESTABLISHED_V4 o FWPM_LAYER_ALE_FLOW_ESTABLISHED_V6), la sua funzione di callout di classificazione non deve mai restituire FWP_ACTION_BLOCK per l'azione. Una decisione di autorizzare o rifiutare una connessione non deve essere effettuata in uno dei livelli di filtro stabiliti dal flusso ALE. Tale decisione deve essere sempre presa in uno degli altri livelli di filtro ALE.

L'unico motivo valido per tale funzione di callout di classificazioneFn per restituire FWP_ACTION_BLOCK per l'azione è se si verifica un errore che potrebbe rappresentare un potenziale rischio di sicurezza se la connessione stabilita non viene terminata. In questo caso, la restituzione di FWP_ACTION_BLOCK per l'azione chiude la connessione per impedire che venga sfruttato il potenziale rischio di sicurezza.

Tempo di esecuzione della funzione callout

Poiché il motore di filtro chiama in genere le funzioni di callout di un callout in IRQL = DISPATCH_LEVEL, assicurarsi che queste funzioni completino la loro esecuzione il più rapidamente possibile per mantenere il sistema in esecuzione in modo efficiente. L'esecuzione estesa a IRQL = DISPATCH_LEVEL può influire negativamente sulle prestazioni complessive del sistema.

Inserimento nel percorso dati di ricezione

I callout devono ricalcolare i checksum IP prima di chiamare funzioni di inserimento dei pacchetti che inseriscono nel percorso dati di ricezione perché il checksum nel pacchetto originale potrebbe non essere corretto quando il pacchetto viene riassemblato dai frammenti di pacchetto IP. Non esiste alcun meccanismo affidabile che indica se un elenco di buffer net viene riassemblato da frammenti.

Inserimento inline del pacchetto TCP da livelli di trasporto

A causa del comportamento di blocco dello stack TCP, un callout al livello di trasporto non può inserire un pacchetto TCP nuovo o clonato dalla funzione di callout di classificazioneFn . Se l'inserimento inline è desiderato, il callout deve accodare un DPC per eseguire l'inserimento.

Allineamento intestazione IP in uscita

MDL che descrive l'intestazione IP in un elenco di buffer net (NET_BUFFER_CURRENT_MDL(NET_BUFFER_LIST_FIRST_NB(netBufferList)) deve essere allineato al puntatore quando una delle funzioni di inserimento dei pacchetti viene usata per inserire i dati dei pacchetti in un percorso in uscita. Poiché l'intestazione IP di un pacchetto in ingresso può essere allineata al puntatore, un callout deve ricompilare l'intestazione IP (se non è già allineata) quando si inserisce un pacchetto in ingresso in un percorso in uscita.

Driver callout della piattaforma di filtro di Windows