jackieky
驱动牛犊
驱动牛犊
  • 注册日期2004-02-10
  • 最后登录2004-08-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
20楼#
发布于:2004-06-14 13:45
youngyt:什么时候有时间?一起吃顿饭
darkme
驱动牛犊
驱动牛犊
  • 注册日期2004-07-17
  • 最后登录2006-03-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
21楼#
发布于:2004-09-03 22:47
请问最后调试通过了吧?
能把代码贴上来看看吗?

在获得包的内容之后(这里我只针对PacketSize<=LookAheadBufferSize,即LookAheadBuffer中包含了全部数据的情况进行处理。)
//这里对pPacketContent进行判断,如果是arp广播包,则进行转发
if(pPacketContent[12] == 8 && pPacketContent[13] == 6)
{
DbgPrint("   Deal with ARP packets    ");
NdisAllocatePacket(&Status, &MyPacket, pAdapt->SendPacketPoolHandle);
if (Status != NDIS_STATUS_SUCCESS)
{
DbgPrint("allocate packet failed\n");
return(Status);
}
NdisAllocateBuffer(&Status, &pPacketBuffer, pAdapt->SendBufferPoolHandle, pPacketContent, PacketLen);
if (Status != NDIS_STATUS_SUCCESS)
{
DbgPrint("allocate buffer failed\n");
return(Status);
}
NdisChainBufferAtFront( MyPacket, pPacketBuffer);
Rsvd = (PRSVD)(MyPacket->ProtocolReserved);
Rsvd->OriginalPkt = NULL;
MyPacket->Private.Head->Next=NULL;
MyPacket->Private.Tail=NULL;
NdisSetPacketFlags(MyPacket, NDIS_FLAGS_DONT_LOOPBACK);
//如果屏蔽掉下面这句,则不会死机
NdisSend(&Status, pAdapt->BindingHandle, MyPacket);//发送
if(Status != NDIS_STATUS_PENDING)
{
DbgPrint("Call NdisSend() Status !=NDIS_STATUS_PENDING");
//这里我不清楚Packet到底指哪个,所以注释掉。
//NdisIMCopySendCompletePerPacketInfo (Packet, MyPacket);
NdisUnchainBufferAtFront(MyPacket ,&pPacketBuffer);
NdisQueryBufferSafe(pPacketBuffer,(PVOID *)&pPacketContent,&BufLength,32);
NdisFreeBuffer(pPacketBuffer);
NdisFreeMemory(pPacketContent,BUFFER_SIZE,0);
NdisDprFreePacket(MyPacket);
}
return(Status);
}

在mpsend和ptsendcomplete中我发送的数据包的分配和构造以及释放都是我来完成的。所以对于在ptreceive中进行转发我也是参考mpsend中的做法。可是不知道为什么会蓝屏。

jackieky大哥,如果可以的话帮小弟一把。
我的邮箱是yiyang2000@eyou.com
MSN:moneyyiyang@hotmail.com
上一页 下一页
游客

返回顶部