阅读:1642回复:1
passthru的接收问题
各位大侠:
最近我想做一个基于passthru接收的网上数据包的程序。 具体思路是这样的,将网卡设成混杂模式,然后再ptreceive 函数的最后也就是“return Status;”之前加入我的数据拷贝 部分。如果LookAheadBufferSize>=PacketSize,那么很简单, 直接将LookAheadBuffer中的数据拷到我的数据缓冲区就可以了, 但是如果LookAheadBufferSize<PacketSize我就首先将lookaheadbuffer中的数据先拷贝到缓冲区,然后在mptransferdata 函数调用了ndistransferdata函数后,加入我的程序,从 ndistransferdata函数返回的packet中取生于的数据。 现在问题来了,我发现在mptransferdata调用了ndistranferdata 函数的返回值bytestransferred为0,而且bytestotransfer和byteoffset这两个数之和不是ptreceive中的packetsize。 这是为什么呀!!!!!!!! 我认为可能是因为系统还没有来的及调用ndistransferdata取出 生于的数据,就有新的ndistransferdata请求,或者是我要的这个 包已经被其他的东东覆盖了。但是为什么会这样呢?那位大侠愿意 出手想救,或者告诉我更好的方法来获得网卡接收到的数据呢? |
|
|
沙发#
发布于:2001-10-19 08:52
我现在想到了一个新的思路,那就是
在ptreceive中如果lookAheadBufferSize<PacketSize 就在ptreceive中直接调用ndistransferdata(). 可是,我试过了,发现回down机,蓝屏。错误是 drive_Irq_lessorequal(大概是这么写的)。 是不是再ptreive中irql不够调用ndistransferdata? 还是因为我调用ndistransferdata直接时传给一个 pndis_packet 变量packet,没有ndisallocatepacket初始化这个 packet。 请多多指点,谢谢! |
|
|