阅读:1338回复:0
windows CE 4.2 的protocolReceive
我想在windows CE 4.2 的passthru的protocol.c文件,使用protocolReceive()中做IPIP封装,ping已经通了,但是一段时间后,会出现内存分配不足。也就是出现内存泄露。代码片断如下,那位大侠给指点一下吧,多谢了!
//把数据包内容拷贝到pData status = NdisAllocateMemory( (PVOID *)&pData, uiLookAheadBufferSize, 0, noMaxAddr); if(status != NDIS_STATUS_SUCCESS) return 1; status = NdisAllocateMemory( (PVOID *)&pHeader, uiHeaderBufferSize, 0, noMaxAddr); if(status != NDIS_STATUS_SUCCESS) return 1; NdisZeroMemory (pHeader, uiHeaderBufferSize); NdisZeroMemory (pData, uiLookAheadBufferSize); NdisMoveMemory(pHeader, pvHeaderBuffer, uiHeaderBufferSize); NdisMoveMemory(pData, pvLookAheadBuffer, uiLookAheadBufferSize); 。。。。。。 。。。。。。 //用pEncapData构造新的数据包 status = NdisAllocateMemory((PVOID *)&pEncapData, uiLookAheadBufferSize+sizeof(ip_header), 0, noMaxAddr); if (status!=NDIS_STATUS_SUCCESS ) return 1; NdisZeroMemory(pEncapData, uiLookAheadBufferSize+sizeof(ip_header)); //把封装好的IP头拷贝进数据包 NdisMoveMemory(pEncapData, pIpHeader, sizeof(ip_header)); NdisMoveMemory(pEncapData+sizeof(ip_header), pData, uiLookAheadBufferSize); 。。。。。。 。。。。。。 //指定包 NdisMEthIndicateReceive(pBinding->hMPBinding, hMacReceiveContext, HeaderBuffer, uiHeaderBufferSize, (PVOID)pEncapData, LookAheadBufferSize+20, uiPacketSize+20); //释放内存 NdisFreeMemory(pIpHeader, sizeof(ip_header), 0); NdisFreeMemory(pEncapData, uiLookAheadBufferSize+20, 0); 如果不封装,只是使用pData代替pLookAheadBuffer,即 NdisMEthIndicateReceive(pBinding->hMPBinding, hMacReceiveContext, pvHeaderBuffer, uiHeaderBufferSize, (PVOID)pData, uiLookAheadBufferSize,uiPacketSize); 就没有内存泄露问题!!! |
|