Delen via


Pakkettags gebruiken

Een callout-stuurprogramma kan relevante pakketten markeren en meldingen ontvangen van gebeurtenissen die plaatsvinden met de gemarkeerde pakketten. Pakkettags worden ondersteund in Windows 7 en nieuwere versies van Windows.

Als u pakketmarkering wilt gebruiken, moet het aanduidingsstuurprogramma de FWPS_NET_BUFFER_LIST_NOTIFY_FN0- of FWPS_NET_BUFFER_LIST_NOTIFY_FN1 callbackfunctie implementeren. Deze functie ontvangt alle statusmeldingen voor de getagde pakketten. Voordat afzonderlijke pakketten kunnen worden getagd, moet het bijschriftstuurprogramma een speciale contexttag verkrijgen door FwpsNetBufferListGetTagForContext0aan te roepen. Het stuurprogramma kan dezelfde contexttag gebruiken voor sommige of alle gemarkeerde pakketten. Een bijschriftstuurprogramma kan bijvoorbeeld onderscheid maken tussen typen getagde pakketten met behulp van verschillende contexttags.

Voor het taggen van pakketten gebruikt de callout-driver NET_BUFFER_LIST structures. Het oproepstuurprogramma roept FwpsNetBufferListAssociateContext0 aan om afzonderlijke NET_BUFFER_LIST structuren te taggen. De context die het bijschriftstuurprogramma aan het pakket koppelt, is een willekeurige niet-ondertekende 64-bits waarde. Wanneer een gebeurtenis wordt geactiveerd, geeft de FWPS_NET_BUFFER_LIST_NOTIFY_FN0 of FWPS_NET_BUFFER_LIST_NOTIFY_FN1 callback de context door als invoerparameter, zodat het callout-stuurprogramma afzonderlijke gelabelde pakketten kan identificeren. De context wordt niet gebruikt of geëvalueerd door de filterengine. Het wordt alleen doorgegeven aan de callback voor gebruik door de callout-driver.

Contexten worden automatisch verwijderd uit gelabelde pakketten wanneer de pakketten de stack verlaten. Als de pakketten echter nooit de TCP/IP-stack invoeren, bijvoorbeeld in het geval van een NDIS-filterstuurprogramma, moeten de contexten handmatig worden verwijderd door FwpsNetBufferListRemoveContext0- aan te roepen met de parameter netBufferList ingesteld op NULL-.

Als een callout bewerkingen vroeg moet afbreken, kunnen contexten worden verwijderd door FwpsNetBufferListRemoveContext0aan te roepen. Als u een context verwijdert, wordt over het algemeen een FWPS_NET_BUFFER_LIST_CONTEXT_REMOVED gebeurtenis geactiveerd. Zie de opsomming FWPS_NET_BUFFER_LIST_EVENT_TYPE0 voor meer informatie over de gebeurtenissen die kunnen worden geactiveerd. In sommige gevallen wordt er geen gebeurtenis geactiveerd, bijvoorbeeld wanneer het pakket nooit de TCP/IP-stack invoert voor verwerking.

Wanneer een getagd pakket wordt gekloond, kan het bijschriftstuurprogramma de context naar het kloonpakket verplaatsen of kopiëren. Als u de context (in het geval van een kloon) wilt verplaatsen, moet het bijschriftstuurprogramma FwpsNetBufferListRetrieveContext0 aanroepen met de parameter removeContext ingesteld op TRUE. Vervolgens kan de context worden gekoppeld aan het nieuwe pakket. Het proces voor het kopiëren van de context (in het geval van een duplicatie) is hetzelfde, behalve dat de parameter removeContext parameter van FwpsNetBufferListRetrieveContext0 moet worden ingesteld op FALSE.

Pakketten die zijn getagd vanuit TCP/IP-lagen kunnen worden opgehaald uit een NDIS-filterstuurprogramma. Het omgekeerde is ook waar. Pakkettags zijn niet beschikbaar vanuit stroomlagen waarin geen pakketten worden aangegeven, behalve gegevenssegmenten.

Een callout-driver kan de context voor een pakket ophalen buiten de FWPS_NET_BUFFER_LIST_NOTIFY_FN0- of FWPS_NET_BUFFER_LIST_NOTIFY_FN1-functie door de FwpsNetBufferListRetrieveContext0aan te roepen. Normaal gesproken haalt een callout-driver de context op in zijn classifyFn callback.

classificeerFn

FWPS_NET_BUFFER_LIST_EVENT_TYPE0

FWPS_NET_BUFFER_LIST_NOTIFY_FN0

FWPS_NET_BUFFER_LIST_NOTIFY_FN1

FwpsNetBufferListAssociateContext0

FwpsNetBufferListGetTagForContext0

FwpsNetBufferListRemoveContext0

FwpsNetBufferListRetrieveContext0

NET_BUFFER_LIST

NDIS-filterstuurprogramma's