阅读:1455回复:0
passthru疑问
对passthru里面接受数据包的protocolXXX函数(例如 ptreceive,ptreceivecomplete,pttransferdatacomplete)和mpXXX(mptransferdata,mpreturnpacket)添加了DbgPrint("函数名")进行调试输出。
自己使用build check 编译出了sys文件,连同passthru原来的2个inf安装文件和一个passthru,dll文件放在一个新的目录下,通过向本地连接添加inf文件的方法向系统中添加进驱动程序,(这里有个疑问,是使用netsf.inf还是2个文件都使用?我只使用了netsf.inf)弄完后可以在本地连接的项目中看到多了一项passthru driver。然后启动debugview可以看到 里面的输出,安装应该没有问题: 里面的输出信息大多是下面2种: 1.ptreceive函数得到不完整的ip数据报,然后通过调用ndismethindicatereceive让ndis调用mptransferdata,该函数再调用ndistransferdata,然后mptransferdata结束,再是ndismethincdicatereceive结束,再是ptreceive结束。(ptreceive的结束是不是表示部分的ip报文已经传送到上层协议了?) 然后调用ptreceivecomplete,调用ndismethindicatereceivecomplete,该函数结束,ptreceivecomplete结束(ptreceivecomplete 的结束是不是表示剩余完整的ip报文也传送给上层协议了?这时上层不需要NdisReturnPacket让下层释放存ip报文的packet吗?) 2. ptreceive函数得到不完整的ip数据报,但是他调用ndismethindicatereceive时不调用mptransferdata就返回 然后调用ptreceivecomplete,调用ndismethindicatereceivecomplete,该函数结束,ptreceivecomplete结束(这明显与理论错误,为什么会出现这种情况,而且是经常出现) 偶尔是ptreceive能够接收到完整的ip报文,就不调用mptransfer,还是会调用ptreceivecomplete 根据这些输出感觉就是向上接受ip数据包分2步,一步使用ptreceive向协议发送不完整或者是完整的ip报文,第2步是通过ptreceivecomplete向上层协议发送完成的消息,如果第1步发送的ip报文不完整的话也会把剩余完整的ip报文发给上层协议。不过感觉与理论上不对,想不通,望人解答。 |
|