ftbk86
驱动牛犊
驱动牛犊
  • 注册日期2005-11-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分57分
  • 威望402点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
阅读:1443回复:0

高手请进!..................................

楼主#
更多 发布于:2010-03-09 18:15
在PtReceivePacket中需要对数据包源IP进行操作,代码如下:

    ReceivePacket(IN PADAPT pAdapt,IN PNDIS_PACKET Packet,OUT PNDIS_PACKET MyPacket)
    {
        status = NdisAllocateMemoryWithTag(&pPacketContent,2048,TAG);
        if(status != NDIS_STATUS_SUCCESS)
        {
            __leave;
            return FALSE;
        }
        NdisZeroMemory(pPacketContent,2048);
        NdisQueryPacket(Packet,&PhysicalBufferCount,&BufferCount,&NdisBuffer,&TotalPacketLength);
        while (TRUE)
        {
            NdisQueryBufferSafe(NdisBuffer,&tembuffer,&copysize,NormalPagePriority);
            if(tembuffer != NULL)
            {
                NdisMoveMemory(pPacketContent + DataOffset,tembuffer,copysize);
                DataOffset += copysize;
            }
            NdisGetNextBuffer(NdisBuffer,&NdisBuffer);
            if(NdisBuffer == NULL) break;
        }
        if(pPacketContent[12] ==8 && pPacketContent[13] ==0)
        {
            PIP_HEADER pIPHeader = NULL;
            NdisAcquireSpinLock(&ListSpinLock);
            pIPHeader = (PIP_HEADER)(pPacketContent + 0x0E);

                       //检查pIPHeader的IP等等操作然后采用如下形式形成新的PACKET

            NdisAllocateBuffer(&status,&MyBuffer,pAdapt->RecvPacketPoolHandle,pPacketContent,DataOffset);
            NdisChainBufferAtFront(MyPacket,MyBuffer);

            ReceRsvd = (PRECV_RSVD)MyPacket->MiniportReserved;                            
            ReceRsvd->OriginalPkt = MyPacket;
                      
                      但是这样后,在MPReturnPacket中的NdisReturnPackets(&MyPacket, 1); 出现错误!
                                    
                }
  }
请问PtReceivePacket中对数据包的操作该如何进行,是否可以象 上面类似一样对数据包进行操作?
游客

返回顶部