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

请教PASSTHRU里MPSend函数的问题

楼主#
更多 发布于:2003-04-05 16:46
各位大虾:
    请看: 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语句注释掉,结果运行后是不能发包了,但是又发现收包也不行了,这是怎么回事,如果我只想单纯的禁止发包而不影响收包应该如何修改呢?
      希望能得到高手的指点,我是一只饥渴的菜鸟:(
tsinghui
驱动牛犊
驱动牛犊
  • 注册日期2003-04-23
  • 最后登录2003-07-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-04-24 11:21
探讨:
  是不是说pending  状态时候,还没有发送完成,等完成之后在释放packet 资源呢??
zuozi
驱动牛犊
驱动牛犊
  • 注册日期2003-03-24
  • 最后登录2004-09-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-04-24 11:31
呵呵,我也是新手,不过刚好刚刚做过这方面的东西

1。返回pending的时候,说明低层暂时对这个包缓存且不做处理,当低层有空,做完对这个包的处理时,会调用PtSendComplete来返回处理状态和控制权,这时候在这个函数里面释放,还可以看到发包的状态。

2。个人觉得是没有道理的,收发包至少在passthru向下的结构中应该是互不干涉吧,不知道你是怎么判断收包也不行的?
punk
驱动小牛
驱动小牛
  • 注册日期2001-04-07
  • 最后登录2018-06-01
  • 粉丝0
  • 关注0
  • 积分621分
  • 威望164点
  • 贡献值0点
  • 好评度60点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-04-24 16:25
在SendComplete中释放啊 :)
不停学习
ruberman
驱动牛犊
驱动牛犊
  • 注册日期2003-04-08
  • 最后登录2011-04-06
  • 粉丝0
  • 关注0
  • 积分150分
  • 威望15点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-04-24 22:46
第一个问题上面已经说的很清楚了。
对于第二个问题。我认为既然你已经禁止发包,那么其他的机器就不能收到你的任何信息包括你的MAC,因此除了广播包你可以收到以外,别的包里肯定没有你的MAC。
我曾经禁止过本机的ARP包,现象是我PING另外一台机器永远不通(前提是ARP表没有那台机器的MAC),然后我开FTP服务器,那个机器也不能登陆。
zuozi
驱动牛犊
驱动牛犊
  • 注册日期2003-03-24
  • 最后登录2004-09-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-04-25 15:07
呵呵,关于不能收到包得问题,确实是这样得,因为你不发任何包,没有人会知道你得存在,就算对方主动ping你,你得reply也发不过去,你ping别人,ping包出不去,因此你在应用层得感觉肯定就是收不到包了,其实是可以收到得,比如你在receive函数里面做一个输出,把所有收到得包显示出来看,就会发现其实是可以收到包得
游客

返回顶部