Разница между обработчиками возврата и получения Фильтры облегченного веса

Я хотел выяснить различия между ReturnNetBufferListsHandler и ReceiveNetBufferListsHandler, когда NDIS вызывает эти обратные вызовы. У меня есть легкий фильтр, который будет изменять прием и отправку пакетов на сетевой карте.

1 ответ

Решение

LWF находится между драйвером NIC и драйвером протокола (например, TCPIP). У LWF есть шанс перехватить и путь передачи (Tx) и путь приема (Rx).

Для передачи Каждый раз, когда протокол отправляет пакет, обработчик FilterSendNetBufferLists вашего фильтра получает пакет. Когда вы закончите с пакетом протокола, вызовите NdisFSendNetBufferListsComplete, чтобы вернуть его обратно в протокол.

Если вы хотите передать пакет драйверу NIC, вызовите NdisFSendNetBufferLists. Когда драйвер NIC выполняется с пакетом Tx, вызывается обработчик FilterSendNetBufferListsComplete вашего фильтра.

Для типичного сквозного фильтра последовательность событий выглядит следующим образом:

1. FilterSendNetBufferLists 2. NdisFSendNetBufferLists 3. FilterSendNetBufferListsComplete 4. NdisFSendNetBufferListsComplete

Для RX Всякий раз, когда NIC указывает получение, обработчик FilterReceiveNetBufferLists вашего фильтра получает пакет. Когда вы закончите с пакетом NIC, вызовите NdisFReturnNetBufferLists. Кроме! если установлен специальный флаг NDIS_RECIEVE_FLAG_RESOURCES.

Если вы хотите указать получение для протокола, вызовите NdisFIndicateReceiveNetBufferLists. Когда протокол завершен с вашим пакетом, вызывается ваш обработчик FilterReturnNetBufferLists.

Для типичного сквозного фильтра последовательность событий выглядит следующим образом:

1. FilterReceiveNetBufferLists 2. NdisFIndicateReceiveNetBufferLists 3. FilterReturnNetBufferLists 4. NdisFReturnNetBufferLists

Другие вопросы по тегам