阅读:1305回复:0
这几行代码有问题吗?
我改了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); . . . . . . . |
|