raingl
驱动牛犊
驱动牛犊
  • 注册日期2005-07-07
  • 最后登录2008-02-28
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望1631点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
阅读:1304回复:0

这几行代码有问题吗?

楼主#
更多 发布于:2005-08-11 10:46
我改了Passthru中的PtReceivePacket部分,想过滤ICMP报文。下面是我加入的程序,安装以后运行基本正常,用别的机器也ping不到我的电脑。但是有一个问题就是:从别的机器不停的ping我的电脑,刚开始程序一直走的是PtReceivePacket,但过一会儿,程序就再也不走PtReceivePacket了,只走PtReceive。这是什么原因?拜托各位老大指点一二。

下面是我在PtReceivePacket加入的代码(PtReceive我没有修改,所以程序走PtReceive的话就没有过滤功能):

NdisQueryPacket(Packet,NULL,&nBufferCount,&pCurrentBuffer,&TotalPacketLength);
DBGPRINT(("BufferCount = %d , TotalPacketLength = %d\n",nBufferCount,TotalPacketLength));

Status = NdisAllocateMemory(&pPacketContent, TotalPacketLength, 0, HighestAcceptableMax);
if(Status != NDIS_STATUS_SUCCESS)
        return(NDIS_STATUS_NOT_ACCEPTED);
NdisZeroMemory (pPacketContent, TotalPacketLength);
for(i=0;;)
{
        NdisQueryBufferSafe(pCurrentBuffer, &pBuf, &BufLength, HighPagePriority);
        NdisMoveMemory(pPacketContent+i, pBuf, BufLength);
        i += BufLength;
        NdisGetNextBuffer(pCurrentBuffer, &pCurrentBuffer);
        if(pCurrentBuffer == NULL)
            break;
}

if(((char *)pPacketContent)[12] == 8 && ((char *)pPacketContent)[13] == 0 && ((char *)pPacketContent)[23] == 1)
{
       DBGPRINT(("ICMP Filtered\n"));
       NdisFreeMemory(pPacketContent, TotalPacketLength, 0);
       return NDIS_STATUS_NOT_ACCEPTED;
}
NdisFreeMemory(pPacketContent, TotalPacketLength, 0);
.
.
.
.
.
.
.
游客

返回顶部