EvilRyu
驱动牛犊
驱动牛犊
  • 注册日期2004-07-13
  • 最后登录2005-08-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:915回复:0

这种情况该符合释放分配的资源?(20分)

楼主#
更多 发布于:2004-11-22 10:24
小弟用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]
游客

返回顶部