JackySha
驱动牛犊
驱动牛犊
  • 注册日期2002-12-12
  • 最后登录2006-06-26
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1386回复:1

MPSendPackets中为什么得不到TCP/IP的头信息?

楼主#
更多 发布于:2005-01-14 13:57
各位高人:

    我想在中间层驱动的MPSendPackets中把IP层传下来的包打出来,但是我发现PacketArray数组只有一个PNDIS_PACKET结构,且这个结构的内容直接是数据,找不到IP头和TCP头,我想问,如何才能得到完整的IP包结构?(我想在MPSendPackets中把IP层传来的包的源IP地址改掉),编译环境为WINXP + DDK

最新喜欢:

cyliucyliu
jasonxia74
驱动牛犊
驱动牛犊
  • 注册日期2004-10-29
  • 最后登录2005-06-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-02-17 17:25
抄了一段代码,希望有帮助。pPaketContent中的内容就是完整的包
行不行再讨论

//---------------------------------------------
    int        PacketSize;
    PUCHAR        pPacketContent;
    PUCHAR        pBuf;
    UINT         BufLength;
    MDL    *     pNext;
    UINT         i;
    
//把数据包内容从Packet拷贝到pPacketContent
NdisQueryPacket( Packet,NULL,NULL,NULL,&PacketSize);
Status= NdisAllocateMemory( &pPacketContent, 2000,
0,HighestAcceptableMax);
if (Status!=NDIS_STATUS_SUCCESS ) return Status;
NdisZeroMemory (pPacketContent, 2000);
NdisQueryBufferSafe(Packet->Private.Head, &pBuf, &BufLength, 32 );
NdisMoveMemory(pPacketContent, pBuf, BufLength);
i = BufLength;
pNext = Packet->Private.Head;
for(;;)
{
if(pNext == Packet->Private.Tail)
break;
pNext = pNext->Next;   //指针后移
if(pNext == NULL)
break;
NdisQueryBufferSafe(pNext,&pBuf,&BufLength,32);
NdisMoveMemory(pPacketContent+i,pBuf,BufLength);
i+=BufLength;
 }
 //数据拷贝完毕
 //-------------------------------------------------
我本将心向明月 奈何明月照沟渠
游客

返回顶部