阅读:1424回复:4
passthru的问题
系统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也抓到发的包。测试显示正常。 各位兄台,谁知道什么原因? |
|
|
沙发#
发布于:2005-07-18 09:50
明白了,谢谢
|
|
|
板凳#
发布于:2005-07-13 13:15
你们的理解有问题,在这个时候,NdisGetReceivedPacket为空并不代表没有包,只是因为miniport驱动,没有构造packet,而是用老的方式通知协议驱动,看passthru ptreceive的代码,NdisGetReceivedPacket为空时的处理,就明白了
|
|
地板#
发布于:2005-07-13 11:10
我在在protocolReceive函数和protocolReceivePacket函数分别设置了断点,无论是vmini还是rtl8139都是使用的protocolReceive函数,没有使用protocolReceivePacket函数。
其中使用vMini那块网卡时用watch察看pRecvPacket 不为NULL。而使用rtl8139那块网卡用watch察看pRecvPacket 为NULL,即没抓到包 |
|
|
地下室#
发布于:2005-07-13 10:21
这跟8139的驱动注册的接口有关系有关系,8139一般都用PTreceive,虽然WINDOWS推荐用PTRECEIVEPACKET。虚拟的话,你一定注册了PTRECEIVEPACKET,所以系统就用PTRECEIVEPACKET。
|
|