Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Un driver di callout può etichettare i pacchetti di interesse e ricevere notifiche sugli eventi che si verificano ai pacchetti etichettati. L'assegnazione di tag ai pacchetti è supportata in Windows 7 e versioni successive di Windows.
Per usare l'assegnazione di tag ai pacchetti, il driver callout deve implementare la funzione di callback FWPS_NET_BUFFER_LIST_NOTIFY_FN0 o FWPS_NET_BUFFER_LIST_NOTIFY_FN1. Questa funzione riceverà tutte le notifiche di stato per i pacchetti con tag. Prima che i singoli pacchetti possano essere contrassegnati, il driver callout deve ottenere un tag di contesto speciale chiamando FwpsNetBufferListGetTagForContext0. Il driver callout può usare lo stesso tag di contesto per alcuni o tutti i pacchetti con tag. Ad esempio, un driver callout può distinguere tra i tipi di pacchetti con tag usando tag di contesto diversi.
Per contrassegnare i pacchetti, il driver callout usa strutture NET_BUFFER_LIST. Il driver callout effettua chiamate a FwpsNetBufferListAssociateContext0 per contrassegnare le singole strutture NET_BUFFER_LIST . Il contesto che il driver di callout associa al pacchetto è un valore arbitrario senza segno a 64 bit. Quando viene attivato un evento, il callback FWPS_NET_BUFFER_LIST_NOTIFY_FN0 o FWPS_NET_BUFFER_LIST_NOTIFY_FN1 passa il contesto come parametro di input in modo che il driver callout possa identificare singoli pacchetti contrassegnati. Il contesto non viene utilizzato o valutato dal motore di filtro. Viene passato solo al callback per essere utilizzato dal driver di callout.
I contesti vengono rimossi automaticamente dai pacchetti con tag quando i pacchetti lasciano lo stack. Tuttavia, se i pacchetti non immettono mai lo stack TCP/IP, ad esempio nel caso di un driver di filtro NDIS, i contesti dovranno essere rimossi manualmente chiamando FwpsNetBufferListRemoveContext0 con il parametro netBufferList impostato su NULL.
Se un callout deve interrompere le operazioni di tagging in anticipo, i contesti possono essere rimossi chiamando FwpsNetBufferListRemoveContext0. La rimozione di un contesto di solito attiva un evento FWPS_NET_BUFFER_LIST_CONTEXT_REMOVED. Per altre informazioni sugli eventi che è possibile attivare, vedere l'enumerazione FWPS_NET_BUFFER_LIST_EVENT_TYPE0. In alcuni casi non verrà attivato alcun evento, ad esempio quando il pacchetto non entra mai nello stack TCP/IP per l'elaborazione.
Quando viene clonato un pacchetto con tag, il driver callout può spostare o copiare il contesto nel pacchetto clone. Per spostare il contesto (nel caso di un clone), il driver del callout deve chiamare FwpsNetBufferListRetrieveContext0 con il parametro removeContext impostato su TRUE. Il contesto può quindi essere associato al nuovo pacchetto. Il processo di copia del contesto (nel caso di una duplicazione) è lo stesso, ad eccezione del fatto che il parametro removeContext di FwpsNetBufferListRetrieveContext0 deve essere impostato su FALSE.
I pacchetti contrassegnati dai livelli TCP/IP possono essere recuperati da un driver di filtro NDIS . È valida anche la procedura inversa. L'assegnazione di tag ai pacchetti non è disponibile dai livelli di flusso in cui non sono indicati pacchetti ad eccezione dei segmenti di dati.
Un driver callout può recuperare il contesto per un pacchetto esterno alla funzione FWPS_NET_BUFFER_LIST_NOTIFY_FN0 o FWPS_NET_BUFFER_LIST_NOTIFY_FN1 chiamando FwpsNetBufferListRetrieveContext0. In genere, un driver callout recupera il contesto nella sua callback classifyFn.
Argomenti correlati
FWPS_NET_BUFFER_LIST_EVENT_TYPE0
FWPS_NET_BUFFER_LIST_NOTIFY_FN0
FWPS_NET_BUFFER_LIST_NOTIFY_FN1
FwpsNetBufferListAssociateContext0
FwpsNetBufferListGetTagForContext0
FwpsNetBufferListRemoveContext0