swift
驱动中牛
驱动中牛
  • 注册日期2001-07-26
  • 最后登录2007-05-09
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
阅读:1679回复:4

注册假协议方法得到的receivecomplete为什么参数中没有packet?

楼主#
更多 发布于:2002-07-01 14:13
本来想在receivecomplete里释放自己的包的,可是在这个函数的定义里我没有找到packet参数,只有ProtocolBindingContext这么一个参数,从这个参数我能得到packet吗?
或者我的自己申请的数据包应该在哪里释放?谢谢!

最新喜欢:

WY.lslrtWY.lsl... ljmmaryljmmar... hbnhbnhbnhbnhbn...
swift
驱动中牛
驱动中牛
  • 注册日期2001-07-26
  • 最后登录2007-05-09
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-07-02 20:32
我试过不释放包好象也不会出问题,但心里不塌实,哪位高人能告诉我,谢谢!!!
gjpland
驱动小牛
驱动小牛
  • 注册日期2001-09-13
  • 最后登录2011-03-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-07-03 12:49
receivecomplete 就在这里边释放包啊。
我思故我在,脑袋不会坏.
swift
驱动中牛
驱动中牛
  • 注册日期2001-07-26
  • 最后登录2007-05-09
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-07-03 12:56
我记得在passthru里有returnpacket这个函数,它可以把包释放掉!

我是用了packet结构里的protocolresolve一个保留位把原始包的地址保存下来,这样我想象passthru里的returnpacket一样,可以通过参数把原始包得到,再把returnpacket传下的包释放!
再把原始包还给ndis!

gjp是不是要申请内存池,然后在receivecomplete里把包所占的空间还原!
gjpland
驱动小牛
驱动小牛
  • 注册日期2001-09-13
  • 最后登录2011-03-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-07-03 16:00
步骤是这样的,
你应该有一个需释放的包队列
你先在ProtocolReceive里把申请的包和资源放到这个队列里去
当protocolreceivecomplete的时候释放。
因为你是使用ndis-hooking而不是常规的PASSTHRU
所以你不能像passthru里把这个队列放在adaptercontext里
建议解决法方法是
1,在每一次hook ndis_open_block时,做一个adaptercontext,然后把这个队列放进这个context里。
2.是做一个全局队列,然后根据ndis_open_block 来判断

btw为什么protocolreceivecomplete没有PACKET参数。
原因很简单因为,protocolreceivecomplete是在所有receive动作结束后被调用的,也就是所他的调用是在miniportreturnpacket之后,
这样的话调用receivecomplete时所有的包都已经都被释放了。所以不可能会给你PACKET参数了。


我思故我在,脑袋不会坏.
游客

返回顶部