Tipi di callout

I tipi di callout seguenti possono essere usati con IL WFP:

Callout di ispezione inline
Questo tipo di callout restituisce sempre FWP_ACTION_CONTINUE dalla funzione classificazioneFn e non modifica il traffico di rete in alcun modo. Un callout che raccoglie le statistiche di rete è un esempio di questo tipo di callout.

Per questo tipo di callout, il tipo di azione filtro (specificato dal membro Type della struttura FWPS_ACTION0 ) deve essere impostato su FWP_ACTION_CALLOUT_INSPECTION.

Callout di ispezione fuori banda
Questo tipo di callout non modifica il traffico di rete. Invece, elimina qualsiasi ispezione da eseguire all'esterno della funzione classificaFn "in sospeso" i dati indicati e quindi reinserire i dati pennati nello stack TCP/IP con una delle funzioni di inserimento dei pacchetti. In sospeso viene implementato prima clonando i dati indicati, seguito dalla restituzione di FWP_ACTION_BLOCK dalla funzione classificazioneFn con il set di bit FWPS_CLASSIFY_OUT_FLAG_ABSORB .

Callout di modifica inline
Questo tipo di callout modifica il traffico di rete facendo prima un clone dei dati indicati, quindi modificando il clone e infine inserendo il clone modificato nello stack TCP/IP dalla funzione di classificazioneFn . Questo tipo di callout restituisce anche FWP_ACTION_BLOCK dalla funzione classificazioneFn con il set di bit FWPS_CLASSIFY_OUT_FLAG_ABSORB .

Il tipo di azione filtro per questo tipo di callout deve essere impostato su FWP_ACTION_CALLOUT_TERMINATING.

Callout di modifica fuori banda
Questo tipo di callout fa prima riferimento al pacchetto indicato usando la funzione FwpsReferenceNetBufferList0 con il parametro intentToModify impostato su TRUE. Il callout restituisce quindi FWP_ACTION_BLOCK con il set di bit FWPS_CLASSIFY_OUT_FLAG_ABSORB dalla funzione di classificazioneFn. Quando il pacchetto è pronto per essere modificato al di fuori della classificazioneFn, il callout clona il pacchetto a cui viene fatto riferimento (non appena viene clonato, il pacchetto originale può quindi essere dereferenziato). Il callout modifica quindi il clone e inserisce nuovamente il pacchetto modificato nello stack TCP/IP.

Il tipo di azione filtro per questo tipo di callout deve essere impostato su FWP_ACTION_CALLOUT_TERMINATING.

Callout di reindirizzamento
Per altre informazioni su questo tipo di callout, vedere Uso di Bind o Connect Redirection.

Esistono due tipi di callout di reindirizzamento:

  • Un callout di reindirizzamento di associazione consente al driver di callout di modificare l'indirizzo locale e la porta locale di un socket.
  • Un callout di reindirizzamento connessione consente al driver callout di modificare l'indirizzo remoto e la porta remota di una connessione.

Il tipo di azione filtro per questo tipo di callout deve essere impostato su FWP_ACTION_PERMIT.

Per altre informazioni sulle FWPS_CLASSIFY_OUT_FLAG_ABSORB, vedere FWPS_CLASSIFY_OUT0. Questo flag non è valido in alcun livello di eliminazione WFP. La restituzione di FWP_ACTION_BLOCK con il flag FWPS_CLASSIFY_OUT_FLAG_ABSORB impostato dalla funzione di classificazioneFn causa l'eliminazione automatica del pacchetto, in modo che il pacchetto non raggiungerà alcun livello di eliminazione WFP, né causerà la generazione di eventi di controllo.

Anche se gli elenchi di buffer net clonati possono essere modificati, ad esempio aggiungendo o rimuovendo buffer di rete o MDL o entrambi, i callout devono annullare tali modifiche prima di chiamare la funzione FwpsFreeCloneNetBufferList0 .

Per coesistere con altri callout che eseguono l'ispezione dei pacchetti, la modifica dei pacchetti o il reindirizzamento della connessione, prima che un pacchetto venga pennato con il meccanismo reference/clone-drop-reinject, un callout deve "hard"-drop il pacchetto originale cancellando il flag di FWPS_RIGHT_ACTION_WRITE nel membro dei dirittidella struttura FWPS_CLASSIFY_OUT0 restituita dalla funzione classificazioneFn . Se il flag di FWPS_RIGHT_ACTION_WRITE viene impostato quando viene chiamato il valore di classificazioneFn (il che significa che il pacchetto potrebbe essere pennato e successivamente reinsezionato o modificato), il callout non deve pennare l'indicazione e non deve modificare il tipo di azione corrente; e deve attendere che un callout di peso superiore inserisca il clone che potrebbe essere modificato.

Il flag FWPS_RIGHT_ACTION_WRITE deve essere impostato ogni volta che un callout penna una classificazione. Il driver di callout deve testare il flag di FWPS_RIGHT_ACTION_WRITE per controllare i diritti per il callout per restituire un'azione. Se questo flag non è impostato, il callout può comunque restituire un'azione di FWP_ACTION_BLOCK per veto un'azione FWP_ACTION_PERMIT restituita da un callout precedente. Nell'esempio illustrato in Uso di un callout per l'ispezione approfondita, la funzione viene appena chiusa se il flag non è impostato.

La funzione FwpsPendOperation0 viene usata per i pacchetti penna che provengono dai livelli di filtro FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_XXX,FWPM_LAYER_ALE_AUTH_LISTEN_XXX o FWPM_LAYER_ALE_AUTH_CONNECT_XXX.

La funzione FwpsPendClassify0 viene usata per i pacchetti penna che provengono dai livelli di filtro in fase di esecuzione seguenti:

FWPS_LAYER_ALE_ENDPOINT_CLOSURE_V4 FWPS_LAYER_ALE_ENDPOINT_CLOSURE_V6 FWPS_LAYER_ALE_CONNECT_REDIRECT_V4 FWPS_LAYER_ALE_CONNECT_REDIRECT_V6 FWPS_LAYER_ALE_BIND_REDIRECT_V4 FWPS_LAYER_ALE_BIND_REDIRECT_V6