baijbup
驱动牛犊
驱动牛犊
  • 注册日期2001-08-03
  • 最后登录2003-05-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1642回复:1

passthru的接收问题

楼主#
更多 发布于:2001-10-18 17:57
各位大侠:
   最近我想做一个基于passthru接收的网上数据包的程序。
具体思路是这样的,将网卡设成混杂模式,然后再ptreceive
函数的最后也就是“return Status;”之前加入我的数据拷贝
部分。如果LookAheadBufferSize>=PacketSize,那么很简单,
直接将LookAheadBuffer中的数据拷到我的数据缓冲区就可以了,
但是如果LookAheadBufferSize<PacketSize我就首先将lookaheadbuffer中的数据先拷贝到缓冲区,然后在mptransferdata
函数调用了ndistransferdata函数后,加入我的程序,从
ndistransferdata函数返回的packet中取生于的数据。
现在问题来了,我发现在mptransferdata调用了ndistranferdata
函数的返回值bytestransferred为0,而且bytestotransfer和byteoffset这两个数之和不是ptreceive中的packetsize。
这是为什么呀!!!!!!!!

我认为可能是因为系统还没有来的及调用ndistransferdata取出
生于的数据,就有新的ndistransferdata请求,或者是我要的这个
包已经被其他的东东覆盖了。但是为什么会这样呢?那位大侠愿意
出手想救,或者告诉我更好的方法来获得网卡接收到的数据呢?
************************ 寻找快乐的人 ************************
baijbup
驱动牛犊
驱动牛犊
  • 注册日期2001-08-03
  • 最后登录2003-05-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-10-19 08:52
我现在想到了一个新的思路,那就是
在ptreceive中如果lookAheadBufferSize<PacketSize
就在ptreceive中直接调用ndistransferdata().
可是,我试过了,发现回down机,蓝屏。错误是
drive_Irq_lessorequal(大概是这么写的)。
是不是再ptreive中irql不够调用ndistransferdata?
还是因为我调用ndistransferdata直接时传给一个
pndis_packet 变量packet,没有ndisallocatepacket初始化这个
packet。
请多多指点,谢谢!
************************ 寻找快乐的人 ************************
游客

返回顶部