yellowzzp
驱动小牛
驱动小牛
  • 注册日期2007-07-16
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1015分
  • 威望131点
  • 贡献值0点
  • 好评度117点
  • 原创分0分
  • 专家分0分
阅读:1951回复:3

中间层 passthru 发包问题?调用发送后蓝屏?

楼主#
更多 发布于:2007-12-25 18:11
我的目的是 在MpSendPackets中 如果检测到某包A,则 发送A ,并且构造另外一个包B
并且发送A和B

现在是调用NdisSend后蓝屏

代码如下
Status = NdisAllocateMemoryWithTag(&pPacketContent,PacketLen,TAG);
        NdisZeroMemory(pPacketContent,PacketLen);

    //填充包内容
    FillContentData(pPacketContent,PacketLen);
    //分配一个新包
    NdisAllocatePacket(&Status,&MyPacket,pAdapt->SendPacketPoolHandle);
    if(NT_SUCCESS(Status))
    {
        //用上面的包内容 pPacketContent 分配一个新的缓冲区  PacketBuffer
        NdisAllocateBuffer(&Status,&PacketBuffer,pAdapt->SendPacketPoolHandle,pPacketContent,PacketLen);
        

        //把这个新分配的缓冲区 连接到 刚分配的新的包上
        NdisChainBufferAtFront( MyPacket, PacketBuffer);
        
        
        MyPacket->Private.Head->Next=NULL;
        MyPacket->Private.Tail=NULL;
        NdisSetPacketFlags(MyPacket, NDIS_FLAGS_DONT_LOOPBACK);//自己定义的包

        KdPrint(("自己发网卡 handle %u",pAdapt->BindingHandle));
        GetPktData(MyPacket,OutBuffer,54 ,&ReturnLen);

        KdPrint(("ReturnLen,%d",ReturnLen));
        NdisSend(&Status, pAdapt->BindingHandle, MyPacket);//发送

        if (Status != NDIS_STATUS_PENDING)
        {
            NdisUnchainBufferAtFront(MyPacket ,&PacketBuffer);
            NdisFreeBuffer(PacketBuffer);
            NdisFreeMemory(pPacketContent,2000,0);
            NdisDprFreePacket(MyPacket);
        }
        return ;
    }
    else
    {
        NdisFreeMemory(pPacketContent,PacketLen,0);
        return ;
    }

感觉构造和发送没有问题..是否是因为发送完之后 没有释放该包
或者发包返回Pending 之后再 SendComplete 的时候 ,把我构造的包 用NdisMSendComplete通知上层释放 导致的错误?
yellowzzp
驱动小牛
驱动小牛
  • 注册日期2007-07-16
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1015分
  • 威望131点
  • 贡献值0点
  • 好评度117点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-12-25 18:15
蓝屏 是 说IRQL 问题
可是NdisSend 函数本身并应该没有这个错误啊.感觉应该是SendComplete的问题..
请教是 是否是如此?

我再修改下Complete看看,不会调试真麻烦啊..光看打印的调试信息还看不出问题........大大们 帮我解下惑
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2007-12-26 10:43
自己构造发送的b包,不要NdisMSendComplete通知上层释放,蓝屏就是因为通知上层造成的。自己分配,自己释放
yellowzzp
驱动小牛
驱动小牛
  • 注册日期2007-07-16
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1015分
  • 威望131点
  • 贡献值0点
  • 好评度117点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-12-26 17:23
谢谢了。.
不过我发现系统的包不释放也没事...就是驱动不能卸了 只能删

还有蓝屏的 BAD_POOL_HEAD 是什么错 缓冲头地址出错嘛?还是跨越 分页内存?
游客

返回顶部