jerryq
驱动牛犊
驱动牛犊
  • 注册日期2004-12-28
  • 最后登录2007-09-11
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
阅读:1361回复:3

请问:自己构造的包,发送出去或者通知上层之后能不能马上释放内存

楼主#
更多 发布于:2007-08-28 16:45
    //发送给上层应用程序
    LogPackage((const char*)pNewDataBuffer, _firstSYNLen, "开始发送SYN包", __FUNCTION__, __LINE__);
    _adapter.ForwardUp(pNewNdisPacket);

    //释放空间
    NdisUnchainBufferAtFront(pNewNdisPacket, &pNewNdisBuffer);
     NdisFreeBuffer(pNewNdisBuffer);
     NdisFreeMemory(pNewDataBuffer, _firstSYNLen, 0);
     NdisFreePacket(pNewNdisPacket);

这样的代码可以吗?
dahubaobao
驱动牛犊
驱动牛犊
  • 注册日期2004-09-25
  • 最后登录2012-03-14
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望80点
  • 贡献值0点
  • 好评度44点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-08-29 08:55
设置OOB的Status为NDIS_STATUS_RESOURCE
这就表示你资源紧缺,要求上层驱动复制一个副本,尽快将资源返回给我。

用这个要小心,因为这虽然是NDIS的标准,但有些不负责的驱动根本不理会
NDIS_STATUS_RESOURCE,如果这时你释放资源,就会BSOD了!
jerryq
驱动牛犊
驱动牛犊
  • 注册日期2004-12-28
  • 最后登录2007-09-11
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-08-29 11:22
我把释放内存的代码去掉了,程序就OK了
但是不知道应该在哪里释放这片内存啊。。。
rangzh
驱动小牛
驱动小牛
  • 注册日期2005-04-24
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望150点
  • 贡献值0点
  • 好评度115点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-08-30 10:55
如果包状态不是设置为NDIS_STATUS_RESOURCES,那么通常在ReturnPacket的时候释放

引用第2楼jerryq于2007-08-29 11:22发表的  :
我把释放内存的代码去掉了,程序就OK了
但是不知道应该在哪里释放这片内存啊。。。
游客

返回顶部