我想找出ReturnNetBufferListsHandler和ReceiveNetBufferListsHandler之间的区别,NDIS何时调用这些回调。我有轻量级过滤器,它将修改NIC上的接收和发送数据包。
答案 0 :(得分:0)
LWF位于NIC驱动程序和协议驱动程序(如TCPIP)之间。 LWF有机会拦截发射(Tx)和放大器。接收(Rx)路径。
:用于的Tx 强> 每当协议发送数据包时,您的过滤器的FilterSendNetBufferLists处理程序都会获取数据包。完成协议的数据包后,调用NdisFSendNetBufferListsComplete将其恢复为协议。
如果您想将数据包传输到NIC驱动程序,请调用NdisFSendNetBufferLists。使用Tx数据包完成NIC驱动程序后,将调用过滤器的FilterSendNetBufferListsComplete处理程序。
对于典型的passthrough过滤器,事件序列如下所示:
1。 FilterSendNetBufferLists 2. NdisFSendNetBufferLists 3. FilterSendNetBufferListsComplete 4. NdisFSendNetBufferListsComplete
对于RX 只要NIC指示接收,您的过滤器的FilterReceiveNetBufferLists处理程序就会获取该数据包。完成NIC的数据包后,请调用NdisFReturnNetBufferLists。除了!如果设置了特殊的NDIS_RECIEVE_FLAG_RESOURCES标志。
如果您要指示协议的接收,请调用NdisFIndicateReceiveNetBufferLists。使用数据包完成协议后,将调用FilterReturnNetBufferLists处理程序。
对于典型的passthrough过滤器,事件序列如下所示:
1。 FilterReceiveNetBufferLists 2. NdisFIndicateReceiveNetBufferLists 3. FilterReturnNetBufferLists 4. NdisFReturnNetBufferLists