fangfeilyf
驱动牛犊
驱动牛犊
  • 注册日期2002-10-14
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1029回复:0

请教为什么驱动发送数据跟网上抓到的数据不一样?

楼主#
更多 发布于:2004-10-16 17:35

驱动发包函数内,没有对发送数据作任何修改,用softICE察看数据内存在NdisSend前后都没有变化,但是用sniffer抓取所发送的包内容有时候会跟发送数据不同,并且每次错误都是IP包的校验和为全零、IP包内容的第9个和第10个字节被修改。请教高手,这是为什么?
万分感谢 !!
发包源码如下:

while( !pSender->bSendFinished )
{
  dwFrameLength = XyzSendTmpGetPacket(pAdapt, &pFramePointer,ENUM_SENDER_BUFFER);
  if (0 == dwFrameLength )
  {
  XyzDelayThread(1000);
  continue;
  }
  if ( NULL == pFramePointer )
  {
  XyzDelayThread(1000);
  continue;
  }
  // 累计发送字节数
  pSender->i64CompleteBytes.QuadPart += dwFrameLength;
  dwHadSend = pSender->i64RequestdTimes.QuadPart% DEF_MAX_TX_FRAME_NUMBER;

  // 循环分配Mdl资源,
  pSender->pFrameMdl[dwHadSend] = IoAllocateMdl(
     pFramePointer,
     dwFrameLength,
     FALSE,
     FALSE,
     NULL);
  while( NULL == pSender->pFrameMdl[dwHadSend] )
  {
   XyzDelayThread(10);
   pSender->pFrameMdl[dwHadSend] = IoAllocateMdl(
pFramePointer,
dwFrameLength, FALSE, FALSE, NULL);
  }
  MmBuildMdlForNonPagedPool(pSender->pFrameMdl[dwHadSend]);
  // 循环分配Packet资源
  NdisAllocatePacket(&ntStatus, &pPacket, pAdapt->SendPacketPoolHandle);
  while(NDIS_STATUS_SUCCESS != ntStatus)
  {
  XyzDelayThread(10);
  NdisAllocatePacket(&ntStatus, &pPacket, pAdapt->SendPacketPoolHandle);
  }
  Rsvd = (PRSVD)(pPacket->ProtocolReserved);
  Rsvd->OriginalPkt = pPacket;
  Rsvd->dwType = DEF_RSVD_TYPE_IOSEND;

  NdisChainBufferAtFront(pPacket, pSender->pFrameMdl[dwHadSend]);

  NdisSend(&ntStatus, pAdapt->BindingHandle, pPacket);
  if (ntStatus != NDIS_STATUS_PENDING)
PtSendComplete(pAdapt, pPacket, ntStatus);

  // 发送没有完成
  if (dwHadSend == DEF_MAX_TX_FRAME_EVENT)
  {
NdisWaitEvent(&pSender->hSendEvent, 0);
NdisResetEvent(&pSender->hSendEvent);
  }
  pSender->i64RequestdTimes.QuadPart++;
}
  PsTerminateSystemThread(STATUS_SUCCESS);
游客

返回顶部