Использование тегов пакетов

Драйвер выноски может помечать интересующие пакеты и получать уведомления о событиях, происходящих с помеченными пакетами. Теги пакетов поддерживаются в Windows 7 и более поздних версиях Windows.

Чтобы использовать теги пакетов, драйвер выноски должен реализовать функцию обратного вызова FWPS_NET_BUFFER_LIST_NOTIFY_FN0 или FWPS_NET_BUFFER_LIST_NOTIFY_FN1 . Эта функция будет получать все уведомления о состоянии для пакетов с тегами. Перед добавлением тегов к отдельным пакетам драйвер выноски должен получить специальный тег контекста, вызвав FwpsNetBufferListGetTagForContext0. Драйвер выноски может использовать один и тот же тег контекста для некоторых или всех пакетов с тегами. Например, драйвер выноски может различать типы пакетов с тегами с помощью разных тегов контекста.

Для добавления тегов к пакетам драйвер выноски использует NET_BUFFER_LIST структуры. Драйвер выноски вызывает FwpsNetBufferListAssociateContext0 для добавления тегов к отдельным NET_BUFFER_LIST структурам. Контекст, который драйвер выноски связывает с пакетом, является произвольным 64-разрядным значением без знака. При активации события обратный вызов FWPS_NET_BUFFER_LIST_NOTIFY_FN0 или FWPS_NET_BUFFER_LIST_NOTIFY_FN1 передает контекст в качестве входного параметра, чтобы драйвер выноски смог идентифицировать отдельные пакеты с тегами. Контекст не используется и не вычисляется подсистемой фильтрации. Он передается в обратный вызов только для использования драйвером выноски.

Контексты удаляются из пакетов с тегами автоматически, когда пакеты покидают стек. Однако если пакеты никогда не попадают в стек TCP/IP ( например, в случае драйвера фильтра NDIS), контексты необходимо удалить вручную, вызвав FwpsNetBufferListRemoveContext0 с параметром netBufferList , имеющим значение NULL.

Если выноске необходимо прервать операции добавления тегов на раннем этапе, контексты можно удалить, вызвав FwpsNetBufferListRemoveContext0. Удаление контекста обычно вызывает событие FWPS_NET_BUFFER_LIST_CONTEXT_REMOVED . Дополнительные сведения о событиях, которые могут быть активированы, см. в перечислении FWPS_NET_BUFFER_LIST_EVENT_TYPE0 . В некоторых случаях событие не активируется, например, когда пакет никогда не входит в стек TCP/IP для обработки.

При клонировании пакета с тегами драйвер выноски может переместить или скопировать контекст в пакет клонирования. Чтобы переместить контекст (в случае клонирования), драйвер выноски должен вызвать FwpsNetBufferListRetrieveContext0 с параметром removeContext , равным TRUE. Затем контекст можно связать с новым пакетом. Процесс копирования контекста (в случае дублирования) такой же, за исключением того, что параметр removeContextобъекта FwpsNetBufferListRetrieveContext0 должен иметь значение FALSE.

Пакеты, помеченные на уровнях TCP/IP, можно извлечь из драйвера фильтра NDIS. То же самое будет наблюдаться и в обратной ситуации. Добавление тегов к пакетам недоступно на уровнях потока, где пакеты не указаны, кроме сегментов данных.

Драйвер выноски может получить контекст для пакета за пределами FWPS_NET_BUFFER_LIST_NOTIFY_FN0 или FWPS_NET_BUFFER_LIST_NOTIFY_FN1 функции, вызвав FwpsNetBufferListRetrieveContext0. Как правило, драйвер выноски получает контекст в обратном вызове classifyFn .

classifyFn

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