阅读:1029回复:0
请教为什么驱动发送数据跟网上抓到的数据不一样?驱动发包函数内,没有对发送数据作任何修改,用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); |
|