sdssly
驱动牛犊
驱动牛犊
  • 注册日期2003-03-04
  • 最后登录2016-01-09
  • 粉丝2
  • 关注0
  • 积分344分
  • 威望47点
  • 贡献值0点
  • 好评度34点
  • 原创分0分
  • 专家分0分
阅读:2507回复:9

passthru ptreceive 函数中packet==NULL时什么办?

楼主#
更多 发布于:2003-05-20 18:12
大家好,现在正在研究passthru。解决了mpsend方面的问题。现在正在搞ptreceive。前面我调试时发现packet!=NULL,很好处理。但是现在好像所有的packet全是NULL了!

我不知道怎么得到接受到的packet。下面是一个输出:

PtReceive:LookAheadBufferSize=175,PacketSize=347

有时候,这两个数是相等的。请问在packet==null时怎么处理这个packet!可以直接调用NdisTransferData函数?

有没有相关的例子可以参考?

谢谢!!!


ruberman
驱动牛犊
驱动牛犊
  • 注册日期2003-04-08
  • 最后登录2011-04-06
  • 粉丝0
  • 关注0
  • 积分150分
  • 威望15点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-05-20 20:21
这时候就要看lookaheadbuffer和packetsize了,如果lookaheadbuffersize>=packetsize,这时已经收到了完整的数据报,
分配内存然后拷贝进去,组包向上面递交可以了.
然后如果是小于,就要调用transferdata来传递剩下的部分,注意内存的分配和释放.
sdssly
驱动牛犊
驱动牛犊
  • 注册日期2003-03-04
  • 最后登录2016-01-09
  • 粉丝2
  • 关注0
  • 积分344分
  • 威望47点
  • 贡献值0点
  • 好评度34点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-05-20 20:35
谢谢你的回答!如果lookaheadbuffersize<packetsize,应该调用哪个函数?我调用了一个ndisgatedata,结果兰平了.好像参数不对.能不能再说得详细一些?

再次感谢!
ruberman
驱动牛犊
驱动牛犊
  • 注册日期2003-04-08
  • 最后登录2011-04-06
  • 粉丝0
  • 关注0
  • 积分150分
  • 威望15点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-05-21 08:25
估计你的内存没有处理好,前面的帖子有很多讨论到这个问题,好好查查.
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-05-21 08:56
调用ndistransferdata
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
qishi1997
驱动牛犊
驱动牛犊
  • 注册日期2003-03-20
  • 最后登录2007-09-09
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-05-26 07:43
对于数据包接受,
用过
Packet = NdisGetReceivedPacket(pAdapt->BindingHandle, MacReceiveContext);
如果得到完整的包
是不是就不用考虑
PacketSize<=LookAheadBufferSize的情况?
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-05-26 09:04
对于数据包接受,
用过
Packet = NdisGetReceivedPacket(pAdapt->BindingHandle, MacReceiveContext);
如果得到完整的包
是不是就不用考虑
PacketSize<=LookAheadBufferSize的情况?

-不是,先判断packetsize和lookaheadbuffersize的大小,然后在作处理。
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
zxcasd
驱动牛犊
驱动牛犊
  • 注册日期2001-06-14
  • 最后登录2007-08-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-05-26 10:28
关于这个问题的研究,论坛上不要太多啊,你好好找找吧!
这里有讲原因和解决方法:
http://www.driverdevelop.com/forum/viewthread.php?fid=10&tid=8559&page=1&totalpost=26
死了都要爱......
qishi1997
驱动牛犊
驱动牛犊
  • 注册日期2003-03-20
  • 最后登录2007-09-09
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-05-26 10:38
也就是说只要处理两种情况:
PacketSize <= LookAheadBufferSize//要么通过NdisGetReceivedPacket取到数据包;要么采用内存拷贝的方式取得数据(这种方式如何处理系统分配的内存)
PacketSize 〉 LookAheadBufferSize调用ndistransferdata
sdssly
驱动牛犊
驱动牛犊
  • 注册日期2003-03-04
  • 最后登录2016-01-09
  • 粉丝2
  • 关注0
  • 积分344分
  • 威望47点
  • 贡献值0点
  • 好评度34点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-05-29 09:03
谢谢大家的帮助!终于可以初步解决这个问题了。好像还有内存泄漏的问题,还要再仔细测试一下。但是已经可以处理packet==
NULL的情况了!以后大家多多交流!
游客

返回顶部