阅读:1679回复:4
注册假协议方法得到的receivecomplete为什么参数中没有packet?
本来想在receivecomplete里释放自己的包的,可是在这个函数的定义里我没有找到packet参数,只有ProtocolBindingContext这么一个参数,从这个参数我能得到packet吗?
或者我的自己申请的数据包应该在哪里释放?谢谢! |
|
沙发#
发布于:2002-07-02 20:32
我试过不释放包好象也不会出问题,但心里不塌实,哪位高人能告诉我,谢谢!!!
|
|
板凳#
发布于:2002-07-03 12:49
receivecomplete 就在这里边释放包啊。
|
|
|
地板#
发布于:2002-07-03 12:56
我记得在passthru里有returnpacket这个函数,它可以把包释放掉!
我是用了packet结构里的protocolresolve一个保留位把原始包的地址保存下来,这样我想象passthru里的returnpacket一样,可以通过参数把原始包得到,再把returnpacket传下的包释放! 再把原始包还给ndis! gjp是不是要申请内存池,然后在receivecomplete里把包所占的空间还原! |
|
地下室#
发布于: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参数了。 |
|
|