阅读:915回复:0
这种情况该符合释放分配的资源?(20分)
小弟用ndis hook 做一个包过滤程序。对收到的包进行改造 只取第一个缓冲区的前54字节,大概代码形态如下:
My_NdisReceivePacket( IN RECEIVE_PACKET_HANDLE pOrigHandler,IN NDIS_HANDLE ProtocolBindingContext,INPNDIS_PACKET Packet ) { NdisAllocateBufferPool(&status,&BufferPoolHandler,1); NdisQueryPacket( Packet, &PhysicalBufferCount, &BufferCount,&pFirstBuffer, &PacketLength); NdisQueryBufferSafe(pFirstBuffer,&pVirtualAddress,&dwBufferLength,HighPagePrioty); pIpHeader = ( PIP_HEADER )( (PUCHAR )pVirtualAddress+14 ); pTcpHeader = ( PTCP_HEADER )( ( PUCHAR )pVirtualAddress+ 34 ); NdisAllocateBuffer( &status, &pNewBuffer, BufferPoolHandler, pVirtualAddress, 54); NdisQueryBufferSafe( pNewBuffer, &pVirtualAddress ,&dwBufferLength,HighPagePriority ); pIpHeader = ( PIP_HEADER )( (PUCHAR )pVirtualAddress+14 ); pTcpHeader = ( PTCP_HEADER )( ( PUCHAR )pVirtualAddress+ 34 ); pIpHeader->DatagramLength = SWAP_WORD( 40 ); RecomputeIpDataCheckSum( pIpHeader ); //重新计算校验和 for( i = 0;i<BufferCount;i++ ); { NdisUnchainBufferAtBack( Packet, &pFirstBuffer ); } NdisChainBufferAtFront( Packet, pNewBuffer ); pOrigHandler(ProtocolBindingContext, Packet);//调用系统原函数收包 } 这种情况下 在函数体内的bufferpool和分配的pNewBuffer该如何释放?在哪里释放呢? [编辑 - 11/22/04 by EvilRyu] |
|