g_force
驱动牛犊
驱动牛犊
  • 注册日期2008-02-19
  • 最后登录2008-03-04
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望11点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
阅读:1413回复:3

很急的问题,NdisSend发包,有一部分网卡不能发?帮忙看下代码吧。

楼主#
更多 发布于:2008-02-19 15:02
再一些网卡上,发送的包,不能用截包软件看到。并且证实是包没发出去。
可是大部分网卡还是能起到效果。
这个包是我自己给自己发的。

DBG打印出来的信息都是正确的,并在PtSendComplete中也有释放。
下面是代码:
NdisAllocatePacket(&Status,&MyPacket,pAdapt->SendPacketPoolHandle);
    if(NT_SUCCESS(Status))
    {
        //用上面的包内容 pPacketContent 分配一个新的缓冲区  PacketBuffer
        NdisAllocateBuffer(&Status,&PacketBuffer,pAdapt->SendPacketPoolHandle,pPacketContent,PacketLen);
        

        //把这个新分配的缓冲区 连接到 刚分配的新的包上
        NdisChainBufferAtFront( MyPacket, PacketBuffer);
        
        Rsvd = (PSEND_RSVD)(MyPacket->ProtocolReserved);
        Rsvd ->OriginalPkt = NULL;

        MyPacket->Private.Flags  = NdisGetPacketFlags(g_SendPacket);
        MyPacket->Private.Head->Next=NULL;
        MyPacket->Private.Tail=NULL;
        NdisSetPacketFlags(MyPacket, NDIS_FLAGS_DONT_LOOPBACK);//自己定义的包


        NdisMoveMemory(NDIS_OOB_DATA_FROM_PACKET(MyPacket),NDIS_OOB_DATA_FROM_PACKET(g_SendPacket),sizeof(NDIS_PACKET_OOB_DATA));
        NdisIMCopySendPerPacketInfo(MyPacket, g_SendPacket);
        NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(g_SendPacket,&MediaSpecificInfo,&MediaSpecificInfoSize);
        if (MediaSpecificInfo || MediaSpecificInfoSize)
        {
            NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(MyPacket,
                MediaSpecificInfo,
                MediaSpecificInfoSize);
        }

        NdisSend(&Status, pAdapt->BindingHandle, MyPacket);//发送

        if (Status != NDIS_STATUS_PENDING)//返回pending的话自己分配的东饕?赑tSendComplete里面释放
        {
            NdisUnchainBufferAtFront(MyPacket ,&PacketBuffer);
            NdisQueryBufferSafe(PacketBuffer,(PVOID *)&pPacketContent,&ReturnLen,32);
            NdisFreeBuffer(PacketBuffer);
            NdisFreeMemory(pPacketContent,ReturnLen,0);
            NdisDprFreePacket(MyPacket);
            return;
        }
        
    }
liio
驱动小牛
驱动小牛
  • 注册日期2005-12-24
  • 最后登录2022-06-16
  • 粉丝4
  • 关注1
  • 积分24分
  • 威望343点
  • 贡献值0点
  • 好评度171点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2008-02-20 09:36
详细请看,我发的再说PtSendComplete
可讨论下
g_force
驱动牛犊
驱动牛犊
  • 注册日期2008-02-19
  • 最后登录2008-03-04
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望11点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-02-22 11:11
感觉跟 SendComplete没太大关系
我在 SendComplete已经对上级的包进行释放了

就是有一部分卡 发包出去 并且SendComplete已经释放的包

网络里却没有
changshizs
驱动牛犊
驱动牛犊
  • 注册日期2007-06-06
  • 最后登录2010-03-05
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望11点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-02-24 00:25
我也想知道为何ndissend 发包返回值为0时,报文是发不出去的,为何了?
游客

返回顶部