nm_0011
驱动牛犊
驱动牛犊
  • 注册日期2008-06-16
  • 最后登录2008-12-15
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1454回复:0

passthru疑问

楼主#
更多 发布于:2008-06-18 22:59
对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报文发给上层协议。不过感觉与理论上不对,想不通,望人解答。
游客

返回顶部