Разница между обработчиками возврата и получения Фильтры облегченного веса
Я хотел выяснить различия между 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