阅读:1582回复:14
求救:ndis_wdm驱动收数据的问题!
我用DS写的一个NDIS_WDM模式的驱动,在收数据的机制参考了DS中
i1394p2p的例子。但是用PING的方式测试驱动的收发数据时发现,收到PING的包报上去以后没有回应,不知道是不是收数据不正确。:( 我收包的代码大体是这样的: 收到下层数据长uiDataLength,指针为pData,以下代码是向NDIS的Indicate PHW_RFD pRfd; // Retrieve the first packet descriptor that is available KNdisPacket Packet(m_pRxArea->GetPacket()); // Extract the proper buffer associated to the descriptor KNdisBuffer buf = Packet.QueryFirstBuffer(); // Find the buffer that matches the RFD pRfd = m_LookAside.Head(); while ( (PVOID)(&pRfd->m_RfdBuffer) != buf.Address()) { pRfd = m_LookAside.Next(pRfd); } // Copy the incoming data to the appropriate packet descriptor NdisMoveMemory ((PUCHAR)buf.Address(),pData,uiDataLength); ASSERT(Packet.IsValid()); // Update the receive stats m_GenStats->rcv_ok++; buf.AdjustLength(uiDataLength); Packet.Recalculate(); PNDIS_PACKET pPacket = m_pRxArea->GetPacket(pRfd); // Complete the associated RFD m_pRxArea->Complete(pRfd); // Indicate the Packet to NDIS pThisAdapter->IndicateReceive(pPacket); 在ReturnPacket的地方调用 m_pRxArea->Reclaim(Packet); 我输出此时的Packet和pData指向的包,可以看到是完全一致的,是不是可以说明上传给NDIS是正确的。 :P 另外还有一个问题: Send数据基本上都可以,但是有时候会死在一句 ExAcquireFastMutex(&FastMutex); 分页出错一类的蓝屏 这两个问题困扰我很久拉 :( :( :( 有经验的高手指点一二啊!!! :) :) :) |
|
最新喜欢:superj... |
沙发#
发布于:2002-10-09 12:50
另外,我也是发现ARP可以有响应而PING就没有。
在前面看见一个朋友也是这个问题,不知道解决没有, 希望多多帮忙啊!!! |
|
板凳#
发布于:2002-10-31 09:27
问题好奇怪啊,为什么有的时候Ping的命令在发出端可以看到响应回来,但是indicate上去,还是timeout?有时候就根本没有响应。
呜呜,各位大侠给点意见吧,偶给它搞得郁闷死了!!! |
|
地板#
发布于:2002-10-31 09:50
这有什么麻烦的?抓一下包看看是不是包格式不对阿?
|
|
地下室#
发布于:2002-10-31 09:50
抓包的工具可以帮你分析包是不是正确的。
|
|
5楼#
发布于:2002-10-31 10:07
我也这样想的拉
我用上次台湾兄弟的EthView试过,被ping的一方收到命令和响应包都是好好的,发起ping的一方就是抓不到响应的包啊,可奇怪的是,我两边的驱动对上层的接口是完全一样的代码啊? 单独在miniport里把包打出来看,我觉得也是对的啊。 还有,miniportSend的函数里,我用softIce的packet命令可以把包显示出来,而发包给上层的时候packet就不行,而watch一个包也是可以看到的,why? fracker兄,还有什么好办法可以用啊?多谢了 |
|
6楼#
发布于:2002-10-31 12:35
你是不是做了加密啊?
对于一个ping包的正确以否,可以看rfc吧? 再者,最好用sniffer或者ethereal之类的工具察看,我没有用过EV,不知道效果如何,还有,你可以一端是没有你的东西的机器,另外一端是装了你的软件的机器看看。 |
|
7楼#
发布于:2002-10-31 13:19
恩,我不是做的加密拉。我是用USB接蓝牙模块作为一个网卡,所以两边必须都是自己的东西才可以通的。
我会用Sniffer再试一试吧。 |
|
8楼#
发布于:2002-10-31 13:38
ping的响应回来了,说明请求包和arp没有问题,我觉得还是应答包有错误。
|
|
9楼#
发布于:2002-10-31 13:38
恩,我不是做的加密拉。我是用USB接蓝牙模块作为一个网卡,所以两边必须都是自己的东西才可以通的。 哦,呵呵,类似的东东我玩过。 |
|
10楼#
发布于:2002-11-01 15:03
我用Sniffer试了一下,发现只能在能返回PING响应的机器上抓到PING的命令包,响应包就是看不见,而另一台机器上就哪个包包也看不到了!!我没有改动上层驱动发给的网卡驱动的任何包啊,难道协议驱动给下层的包也会是错误的么?
fracker老大,我下的一个sniffer程序,发现只有dll,就没有sys,不知道它是用什么方式来截获ip包的那?arp包好像是不能截到的。 真奇怪耶!你做过类似的东东啊,太好了,一定要多多帮忙,老板让我一个人搞这个,快搞死掉了 :( |
|
11楼#
发布于:2002-11-05 08:50
fracker,随便什么,给点意见拉!
|
|
12楼#
发布于:2002-11-05 19:37
fracker,随便什么,给点意见拉! 不好意思,没在意这个贴子,还没有搞定吗? |
|
13楼#
发布于:2002-11-05 19:43
我用Sniffer试了一下,发现只能在能返回PING响应的机器上抓到PING的命令包,响应包就是看不见,而另一台机器上就哪个包包也看不到了!!我没有改动上层驱动发给的网卡驱动的任何包啊,难道协议驱动给下层的包也会是错误的么? 你仔细检查一下,一般用ping一下以后,会有四个icmp请求包发出,如果没有错误,应该有四个icmp响应包回来,你用sniffer抓的话,一台机器上就能抓到8个包,还有,建议你看看《用TCP/IP进行网络互连》第一册,那里有关于icmp的格式,你要是很熟悉包的格式的话,很快就可以找到问题所在的。 fracker老大,我下的一个sniffer程序,发现只有dll,就没有sys,不知道它是用什么方式来截获ip包的那?arp包好像是不能截到的。 它的.sys估计不在应用程序的目录,你注意看网络里面,增加了一个sniffer的协议,这个协议就是用来抓包的。 |
|
14楼#
发布于:2002-11-05 19:45
不过我只用DDK,从来不用DS的,我看你都使用的类的成员函数向上指示数据,应该不会错的。
|
|