jruinet
驱动牛犊
驱动牛犊
  • 注册日期2007-03-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分130分
  • 威望14点
  • 贡献值0点
  • 好评度13点
  • 原创分0分
  • 专家分0分
阅读:1641回复:4

passthru 源代码的疑问

楼主#
更多 发布于:2007-03-15 11:54
  PtReceivePacket过程中
NdisGetPacketFlags(MyPacket) = NdisGetPacketFlags(Packet);

        Status = NDIS_GET_PACKET_STATUS(Packet);

        NDIS_SET_PACKET_STATUS(MyPacket, Status);
        NDIS_SET_PACKET_HEADER_SIZE(MyPacket, NDIS_GET_PACKET_HEADER_SIZE(Packet));

        if (Status == NDIS_STATUS_RESOURCES)
        {
            PtQueueReceivedPacket(pAdapt, MyPacket, TRUE);
        }
        else
        {
            PtQueueReceivedPacket(pAdapt, MyPacket, FALSE);
        }

        if (Status == NDIS_STATUS_RESOURCES)
        {
            NdisDprFreePacket(MyPacket);//这里为什么要释放MyPacket
        }
在这里释放了上层怎么接收的呢?
在进入PtQueueReceivedPacket后也只是简单的将MyPacket指针加入到队列的数组中并没有复制一个副本出来呀?
而上层调用passthru MI的MPReturnPacket后又再度释放了一次
 PNDIS_PACKET    MyPacket;
        PRECV_RSVD      RecvRsvd;
    
        RecvRsvd = (PRECV_RSVD)(Packet->MiniportReserved);
        MyPacket = RecvRsvd->OriginalPkt;
    
        NdisFreePacket(Packet);
        NdisReturnPackets(&MyPacket, 1);

不会出现重复释放吗???
cxtcxtcxt
驱动牛犊
驱动牛犊
  • 注册日期2002-05-28
  • 最后登录2007-07-26
  • 粉丝0
  • 关注0
  • 积分90分
  • 威望9点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-03-16 14:48
注意释放资源的条件:if (Status == NDIS_STATUS_RESOURCES)

如果出现 (Status == NDIS_STATUS_RESOURCES)的情况,则执行
PtQueueReceivedPacket(pAdapt, MyPacket, TRUE);
第三个参数TRUE表示不缓存,直接indicate up,所以到了后面当然可以释放资源,没有问题
jruinet
驱动牛犊
驱动牛犊
  • 注册日期2007-03-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分130分
  • 威望14点
  • 贡献值0点
  • 好评度13点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-03-17 10:15
在MI里不是释放了一次了吗?NdisFreePacket(Packet);
smallbear111
驱动牛犊
驱动牛犊
  • 注册日期2007-01-06
  • 最后登录2009-04-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望16点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-03-31 13:23
两个事不同层次的packet descriptor
驱网无线,快乐无限
smallbear111
驱动牛犊
驱动牛犊
  • 注册日期2007-01-06
  • 最后登录2009-04-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望16点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-03-31 13:24
两个事不同层次的packet descriptor
驱网无线,快乐无限
游客

返回顶部