关于NdisReturnPackets+0x48处的崩溃

如果你写中间层驱动遇到NdisReturnPackets+0x48处崩溃,原因在于:

底层提交给了的packet,而此包是不能被重用的;而你却又通过NdisReturnpackets返回给底层;

 

解决方法:

1)确认底层给你的包如果是不能被重用的,你不能通过NdisReturnpackets返回给他;

2)在MPReturnPackets中通过

PNDIS_PACKET_STACK NdisIMGetCurrentPacketStack(
  PNDIS_PACKET Packet,
  BOOLEAN* StacksRemaining
);对提交给底层的packet进行进一步判断:

PNDIS_PACKET_STACK  stack;

BOOLEAN StacksRemaining;

 

stack=NdisIMGetCurrentPacketStack(oldPacket,&StacksRemaining);

if(StacksRemaining)                 //must have!!!

{

        NdisReturnPackets(&oldPacket,1);

}

{

         DbgPrint("we can not return the packet,becase the down layer maybe has Freed the packet,if you return the packet,it may be free twice!");

}

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值