LincolnII
驱动牛犊
驱动牛犊
  • 注册日期2009-05-14
  • 最后登录2009-06-16
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望81点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1709回复:3

ptreceive只截获到了广播包是怎么回事啊?

楼主#
更多 发布于:2009-06-03 23:02
小弟把2003DDK的PASSTHRU中的ptreceive中加了一段代码:
                Status= NdisAllocateMemory( &pPacketContent, 2000, 0,HighestAcceptableMax);
                if (Status!=NDIS_STATUS_SUCCESS ) return Status;
                NdisZeroMemory (pPacketContent, 2000);
                pNext = MyPacket->Private.Head;
                NdisQueryBufferSafe(pNext, &pBuf, &BufLength, 32 );
                NdisMoveMemory(pPacketContent, pBuf, BufLength);
                i = BufLength;
                   for(;;)
                {
                    DBGPRINT(("进入内部循环\n"));
 /*                   if(pNext == MyPacket->Private.Tail)
                    {
                        DBGPRINT(("到达尾部,跳出循环\n"));
                        break;
                    }*/
                    
                    pNext = pNext->Next; //指针后移
                    if(pNext == NULL)
                    {
                        DBGPRINT(("下一缓冲区为空,跳出循环\n"));
                        break;
                    }
                    NdisQueryBufferSafe(pNext,&pBuf,&BufLength,32);
                    NdisMoveMemory(pPacketContent+i,pBuf,BufLength);
                    i+=BufLength;
                }
                DBGPRINT(("ptreceive\n"));
    for(j=0;j<i;j++)
                DBGPRINT(("%d字节内容是:%x\n",j,pPacketContent[j]));
                DBGPRINT(("包大小是:%d\n",i));
有两个问题:
问题一:每次pNext = pNext->Next;后pNext就为空,然后跳出for循环了。如果把 pNext = pNext->Next;放到 if(pNext == MyPacket->Private.Tail)之前也会说pNext == MyPacket->Private.Tail退出循环。也就是说每次只有Head这个Buffer.
问题二:在后面打印pPacketContent的时候前六个字节为ffffffffffff,接着六个字节为我的虚拟机的ma地址,而且只有这种的包,每次打开浏览器却没什么反应,难道是自己发的广播包又回来了??12,13字节是8和0,但是23字节是11。后面的就不知道对不对了。
打印内容如下:
Passthru: ==> Protocol BindAdapter
Passthru: <== Protocol BindAdapter: pAdapt 82A17E28, Status 0
Passthru: PtPnPHandler: Adapt 00000000, Event 4
Passthru: ==> Protocol BindAdapter
Passthru: ==> Miniport Initialize: Adapt 82A16C98
Passthru: ==>PtRegisterDevice
Passthru: <==PtRegisterDevice: 0
Passthru: <== Miniport Initialize: Adapt 82A16C98, Status 0
Passthru: <== Protocol BindAdapter: pAdapt 82A16C98, Status 0
Passthru: PtPnPHandler: Adapt 00000000, Event 6
Passthru: <==PtPNPNetEventReconfigure: pAdapt 00000000
Passthru: PtPnPHandler: Adapt 00000000, Event 6
Passthru: ==> Miniport Initialize: Adapt 82A17E28
Passthru: ==>PtRegisterDevice
Passthru: <==PtRegisterDevice: 0
Passthru: <== Miniport Initialize: Adapt 82A17E28, Status 0
Passthru: 进入内部循环
Passthru: 下一缓冲区为空,跳出循环
Passthru: ptreceive
Passthru: 0包内容是:ff
Passthru: 1包内容是:ff
Passthru: 2包内容是:ff
Passthru: 3包内容是:ff
Passthru: 4包内容是:ff
Passthru: 5包内容是:ff
Passthru: 6包内容是:0
Passthru: 7包内容是:c
Passthru: 8包内容是:29
Passthru: 9包内容是:db
Passthru: 10包内容是:e3
Passthru: 11包内容是:33
Passthru: 12包内容是:8
Passthru: 13包内容是:0
Passthru: 14包内容是:45
Passthru: 15包内容是:0
Passthru: 16包内容是:1
Passthru: 17包内容是:48
Passthru: 18包内容是:0
Passthru: 19包内容是:42
Passthru: 20包内容是:0
Passthru: 21包内容是:0
Passthru: 22包内容是:80
Passthru: 23包内容是:11
Passthru: 24包内容是:39
Passthru: 25包内容是:64
Passthru: 26包内容是:0
Passthru: 27包内容是:0
Passthru: 28包内容是:0
Passthru: 29包内容是:0
Passthru: 30包内容是:ff
Passthru: 31包内容是:ff
Passthru: 32包内容是:ff
Passthru: 33包内容是:ff
Passthru: 34包内容是:0
Passthru: 35包内容是:44
Passthru: 36包内容是:0
Passthru: 37包内容是:43
Passthru: 38包内容是:1
Passthru: 39包内容是:34
Passthru: 40包内容是:31
Passthru: 41包内容是:fb
Passthru: 42包内容是:1
Passthru: 43包内容是:1
Passthru: 44包内容是:6
Passthru: 45包内容是:0
Passthru: 46包内容是:60
Passthru: 47包内容是:31
Passthru: 48包内容是:23
Passthru: 49包内容是:3a          
。。。。。。。。。。。
feitianwohong
驱动牛犊
驱动牛犊
  • 注册日期2009-04-22
  • 最后登录2009-06-09
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望51点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-06-05 10:39
难道没牛人    回一个?????
LincolnII
驱动牛犊
驱动牛犊
  • 注册日期2009-05-14
  • 最后登录2009-06-16
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望81点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2009-06-08 00:34
怎么没人知道这是则么回事啊?版主也不知道吗???
Chequer
驱动牛犊
驱动牛犊
  • 注册日期2008-10-07
  • 最后登录2011-08-26
  • 粉丝0
  • 关注0
  • 积分17分
  • 威望144点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2009-07-08 11:28
Protocol驱动在希望收到unicast之前,需要发送OID_GEN_CURRENT_PACKET_FILTER,设定它像接受的包。
游客

返回顶部