localsun
驱动牛犊
驱动牛犊
  • 注册日期2002-12-06
  • 最后登录2005-03-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1629回复:8

PASSTHRU里MPSend函数的问题

楼主#
更多 发布于:2003-04-05 16:48
各位大虾:
    请看: PASSTHRU里MPSend函数里有如下代码


  NdisSend(&Status,
pAdapt->BindingHandle,
MyPacket);

    

  if (Status != NDIS_STATUS_PENDING)
{
NdisIMCopySendCompletePerPacketInfo (Packet, MyPacket);
NdisFreePacket(MyPacket);
}
}
else
{
//
// We are out of packets. Silently drop it. Alternatively we can deal with it:
// - By keeping separate send and receive pools
// - Dynamically allocate more pools as needed and free them when not needed
//
}
我想请问:
      1。当 NdisSend(&Status,
pAdapt->BindingHandle,
MyPacket);
函数返回的Status值为 NDIS_STATUS_PENDING时NdisFreePacket(MyPacket)没有执行,那前面NdisAllocatePacket(&Status,
  &MyPacket,
  pAdapt->SendPacketPoolHandle)函数声明的MyPacket的资源岂不是没有被释放,这样一来程序为什么不会出错?
      2。当我不想让驱动向下发送数据包时,我将前面的NdisSend语句注释掉,结果运行后是不能发包了,但是又发现收包也不行了,这是怎么回事,如果我只想单纯的禁止发包而不影响收包应该如何修改呢?
      希望能得到高手的指点,我是一只饥渴的菜鸟:(
ruberman
驱动牛犊
驱动牛犊
  • 注册日期2003-04-08
  • 最后登录2011-04-06
  • 粉丝0
  • 关注0
  • 积分150分
  • 威望15点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-04-08 18:05
1。好像返回PENDING的时候要到SENDCOMPLETE里面释放的。
2。正在考虑
新手的理解,不知道对不对。。
fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
板凳#
发布于:2003-04-08 18:45
第一个问题我认为楼上的说得对
第二个问题,因为网上的包大都是一个过去一个回来,有因才有果,别人收不到你的包,自然也不理你了。
alan2u
驱动巨牛
驱动巨牛
  • 注册日期2001-12-11
  • 最后登录2018-06-02
  • 粉丝0
  • 关注0
  • 积分5926分
  • 威望43813点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2003-04-08 20:04
     2。当我不想让驱动向下发送数据包时,我将前面的NdisSend语句注释掉,结果运行后是不能发包了,但是又发现收包也不行了,这是怎么回事,如果我只想单纯的禁止发包而不影响收包应该如何修改呢?
      希望能得到高手的指点,我是一只饥渴的菜鸟:(


只想收包,你只要关心与receivepacket相关的函数就可以了。一般来说,只需要接收数据包,可以不用中间层,用协议(protocol)来得简单。
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-04-09 09:42
注掉ndisend以后,还要告诉协议层这个包你已经发出去了,让他释放资源。
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-04-09 09:47
第一个问题就是在sendcomplete里面来处理,释放你的资源
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
localsun
驱动牛犊
驱动牛犊
  • 注册日期2002-12-06
  • 最后登录2005-03-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-04-09 15:06
注掉ndisend以后,还要告诉协议层这个包你已经发出去了,让他释放资源。



是通过NdisIMCopySendCompletePerPacketInfo函数吗?
tsinghui
驱动牛犊
驱动牛犊
  • 注册日期2003-04-23
  • 最后登录2003-07-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-04-24 11:24
估计可能是的吧!
据我的理解NdisSend 负责调用Ndis 来发送数据,而这个是提示上层协议发送完成。
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-04-24 11:42
sendcomplete
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
游客

返回顶部