[英]NDIS filter driver' FilterReceiveNetBufferLists handler isn't called
[英]Why my NDIS filter driver' FilterReceiveNetBufferLists handler is not called?
大家。 再次是我,那个将WinPcap从NDIS 6协议移植到NDIS 6过滤器的家伙:)我遇到了一个错误,将我困了两天。 在这里是:安装npf6x.sys驱动程序(原始名称为npf.sys)后,可以通过“ net start npf”启动该服务。 然后我打开了Wireshark。 然后网络中断(托盘图标上的感叹号)。 进行远程调试后,我发现从不调用FilterReceiveNetBufferLists例程。 我相信RX链接在这里坏了。 但是,通常会调用FilterSendNetBufferLists。 我确定FilterAttach已经成功调用,并且现在没有FilterUnload被调用。 因此,过滤器模块应仍在原位。 但是它不能在RX路径中工作。 然后,我单击Wireshark的“开始”按钮,意外地发现网络已恢复。 然后,我停止了当前的捕获并单击“接口列表”,网络再次断开。 太奇怪了
我没有在驱动程序的运行过程中更改处理程序指针。 我似乎驱动程序也没有被锁阻塞。 谁能告诉我是否有任何情况导致NDIS在其运行期间不调用过滤器的FilterReceiveNetBufferLists?
另外,还有任何官方文件涉及如何从NDIS 6协议移植到NDIS 6过滤器? 我只找到了从NDIS 5移植到NDIS 6的文档。
谢谢。
我们没有LWF-> Protocol的官方文档,因为这不是很常见的过渡。
很难说是什么原因导致网络瘫痪,因为可能有很多原因。 最好的方法是使用内核调试器,并开始使用!ndiskd.miniport
分析事物。 这是网络故障时要检查的一般检查表:
!ndiskd.miniport
是否将STATE区域中的所有内容显示为绿色或正常外观。 确保数据路径正常( 未绕过)并且已连接媒体连接状态。 !ndiskd.miniport
的BINDINGS部分是否列出了您的过滤器。 如果您使用的是新的Windows 8.1 WDK,还请检查过滤器的绑定是否未“拒绝”。 !ndiskd.miniport -filterdb
显示微型端口至少允许!ndiskd.miniport -filterdb
通信。 ndis!NdisMIndicateReceiveNetBufferLists
上设置一个断点,并验证该断点是否频繁命中,因为NIC正在将收到的数据包提供给OS。 ndis!NdisSendNetBufferLists
上设置一个断点,以查看TCPIP是否正在发送任何流量。 如果是这样,请在微型端口发送处理程序上设置另一个断点(使用!ndiskd.minidriver
查找其MiniportSendNetBufferLists
处理程序),并验证发送数据包是否将其发送到NIC。 !ndiskd.pendingnbls
查看是否还没有返回任何NBL。 它通常会找到零个或一个未决的NBL。 如果看到数百个,则说明过滤器中存在NBL泄漏。 Get-NetAdapterStatistics
。 如果您不熟悉Windows内核网络调试,将很难确定某些情况是好是坏。 理想情况下,您将有另一台可以运行的计算机进行调试,因此您可以看到“正常”状态。
如果您的搜索仍然没有找到任何有用的信息,那么另一个攻击的角度是对您所做的代码更改进行二进制搜索。 首先,注释掉您对过滤器的接收路径所做的所有更改,并将其恢复为与示例中完全相同。 这样可以解决问题吗? 如果是这样,请继续。 。 。 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.