suliaodai
驱动牛犊
驱动牛犊
  • 注册日期2004-10-11
  • 最后登录2005-09-07
  • 粉丝0
  • 关注0
  • 积分27分
  • 威望5点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1424回复:4

passthru的问题

楼主#
更多 发布于:2005-07-12 17:31
  系统wince.net,已经正确安装了passthru,passthru未经任何修改,网卡为2块rtl8139。其中一块被虚拟成vMini,另一块显示为rtl8139。
在protocolReceive函数和protocolReceivePacket函数分别设置了断点,用ping做测试,在程序
。。。。。。
if (pBinding->hMPBinding == NULL)
       {
              status = NDIS_STATUS_FAILURE;
              goto cleanUp;
       }

       //
       // Get at the packet, if any, indicated up by the miniport below.
       //
      
       pRecvPacket = NdisGetReceivedPacket(pBinding->hPTBinding, hMacReceiveContext);

       if (pRecvPacket != NULL)
       {
。。。。。。
运行中使用rtl8139那块网卡时用watch察看pRecvPacket 为NULL,可是ping -t命令的确不停地发包。用ethereal也抓到发的包。
使用vMini那块网卡时用watch察看pRecvPacket 不为NULL,NdisGetReceivedPacket()收到了数据包。用ethereal也抓到发的包。测试显示正常。
各位兄台,谁知道什么原因?
苦力汉子
suliaodai
驱动牛犊
驱动牛犊
  • 注册日期2004-10-11
  • 最后登录2005-09-07
  • 粉丝0
  • 关注0
  • 积分27分
  • 威望5点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-07-18 09:50
明白了,谢谢
苦力汉子
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2005-07-13 13:15
你们的理解有问题,在这个时候,NdisGetReceivedPacket为空并不代表没有包,只是因为miniport驱动,没有构造packet,而是用老的方式通知协议驱动,看passthru ptreceive的代码,NdisGetReceivedPacket为空时的处理,就明白了
suliaodai
驱动牛犊
驱动牛犊
  • 注册日期2004-10-11
  • 最后登录2005-09-07
  • 粉丝0
  • 关注0
  • 积分27分
  • 威望5点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-07-13 11:10
我在在protocolReceive函数和protocolReceivePacket函数分别设置了断点,无论是vmini还是rtl8139都是使用的protocolReceive函数,没有使用protocolReceivePacket函数。
其中使用vMini那块网卡时用watch察看pRecvPacket 不为NULL。而使用rtl8139那块网卡用watch察看pRecvPacket 为NULL,即没抓到包
苦力汉子
asmsys
驱动老牛
驱动老牛
  • 注册日期2002-03-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望17点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-07-13 10:21
这跟8139的驱动注册的接口有关系有关系,8139一般都用PTreceive,虽然WINDOWS推荐用PTRECEIVEPACKET。虚拟的话,你一定注册了PTRECEIVEPACKET,所以系统就用PTRECEIVEPACKET。
游客

返回顶部