Verwenden von Pakettagging
Ein Beschriftungstreiber kann pakete von Interesse markieren und Benachrichtigungen über Ereignisse empfangen, die mit den markierten Paketen auftreten. Pakettagging wird in Windows 7 und höheren Versionen von Windows unterstützt.
Um pakettagging zu verwenden, muss der Legendentreiber die FWPS_NET_BUFFER_LIST_NOTIFY_FN0 - oder FWPS_NET_BUFFER_LIST_NOTIFY_FN1 Rückruffunktion implementieren. Diese Funktion empfängt alle status Benachrichtigungen für die markierten Pakete. Bevor einzelne Pakete markiert werden können, muss der Legendentreiber durch Aufrufen von FwpsNetBufferListGetTagForContext0 ein spezielles Kontexttag abrufen. Der Legendentreiber kann für einige oder alle markierten Pakete das gleiche Kontexttag verwenden. Beispielsweise kann ein Legendentreiber zwischen Typen von markierten Paketen unterscheiden, indem verschiedene Kontexttags verwendet werden.
Um Pakete zu markieren, verwendet der Legendentreiber NET_BUFFER_LIST Strukturen. Der Legendentreiber führt Aufrufe an FwpsNetBufferListAssociateContext0 aus, um einzelne NET_BUFFER_LIST-Strukturen zu markieren. Der Kontext, den der Legendentreiber dem Paket zuordnet, ist ein beliebiger 64-Bit-Wert ohne Vorzeichen. Wenn ein Ereignis ausgelöst wird, übergibt der FWPS_NET_BUFFER_LIST_NOTIFY_FN0 - oder FWPS_NET_BUFFER_LIST_NOTIFY_FN1-Rückruf den Kontext als Eingabeparameter, damit der Legendentreiber einzelne markierte Pakete identifizieren kann. Der Kontext wird von der Filter-Engine nicht verwendet oder ausgewertet. Sie wird nur zur Verwendung durch den Legendentreiber an den Rückruf übergeben.
Kontexte werden automatisch aus markierten Paketen entfernt, wenn die Pakete den Stapel verlassen. Wenn die Pakete jedoch nie in den TCP/IP-Stapel gelangen , z. B. bei einem NDIS-Filtertreiber, müssen die Kontexte manuell entfernt werden, indem FwpsNetBufferListRemoveContext0 aufgerufen wird, wobei der netBufferList-Parameter auf NULL festgelegt ist.
Wenn eine Legende Taggingvorgänge frühzeitig abbrechen muss, können Kontexte durch Aufrufen von FwpsNetBufferListRemoveContext0 entfernt werden. Das Entfernen eines Kontexts löst im Allgemeinen ein FWPS_NET_BUFFER_LIST_CONTEXT_REMOVED-Ereignis aus. Weitere Informationen zu den Ereignissen, die ausgelöst werden können, finden Sie in der FWPS_NET_BUFFER_LIST_EVENT_TYPE0-Enumeration . In einigen Fällen wird kein Ereignis ausgelöst, z. B. wenn das Paket nie zur Verarbeitung in den TCP/IP-Stapel eintritt.
Wenn ein markiertes Paket geklont wird, kann der Legendentreiber den Kontext in das Klonpaket verschieben oder kopieren. Um den Kontext (im Fall eines Klons) zu verschieben, muss der Legendentreiber FwpsNetBufferListRetrieveContext0 aufrufen, wobei der removeContext-Parameter auf TRUE festgelegt ist. Anschließend kann der Kontext dem neuen Paket zugeordnet werden. Der Prozess zum Kopieren des Kontexts (im Falle einer Duplizierung) ist identisch, mit der Ausnahme, dass der removeContext-Parameter von FwpsNetBufferListRetrieveContext0 auf FALSE festgelegt werden muss.
Pakete, die von TCP/IP-Ebenen markiert sind, können von einem NDIS-Filtertreiber abgerufen werden. Das Gegenteil trifft ebenfalls zu. Die Paketmarkierung ist nicht auf Streamebenen verfügbar, auf denen außer Datensegmenten keine Pakete angegeben sind.
Ein Legendentreiber kann den Kontext für ein Paket außerhalb der FWPS_NET_BUFFER_LIST_NOTIFY_FN0- oder FWPS_NET_BUFFER_LIST_NOTIFY_FN1-Funktion abrufen, indem fwpsNetBufferListRetrieveContext0 aufgerufen wird. In der Regel ruft ein Legendentreiber den Kontext in seinem klassifizierenFn-Rückruf ab.
Zugehörige Themen
FWPS_NET_BUFFER_LIST_EVENT_TYPE0
FWPS_NET_BUFFER_LIST_NOTIFY_FN0
FWPS_NET_BUFFER_LIST_NOTIFY_FN1
FwpsNetBufferListAssociateContext0
FwpsNetBufferListGetTagForContext0
FwpsNetBufferListRemoveContext0