mini
驱动牛犊
驱动牛犊
  • 注册日期2002-04-27
  • 最后登录2003-01-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1582回复:14

求救:ndis_wdm驱动收数据的问题!

楼主#
更多 发布于:2002-10-09 11:31
我用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);
分页出错一类的蓝屏

这两个问题困扰我很久拉 :( :( :(
有经验的高手指点一二啊!!! :) :) :)

最新喜欢:

superjetsuperj...
mini
驱动牛犊
驱动牛犊
  • 注册日期2002-04-27
  • 最后登录2003-01-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-10-09 12:50
另外,我也是发现ARP可以有响应而PING就没有。
在前面看见一个朋友也是这个问题,不知道解决没有,
希望多多帮忙啊!!!
mini
驱动牛犊
驱动牛犊
  • 注册日期2002-04-27
  • 最后登录2003-01-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-10-31 09:27
问题好奇怪啊,为什么有的时候Ping的命令在发出端可以看到响应回来,但是indicate上去,还是timeout?有时候就根本没有响应。

呜呜,各位大侠给点意见吧,偶给它搞得郁闷死了!!!
fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
地板#
发布于:2002-10-31 09:50
这有什么麻烦的?抓一下包看看是不是包格式不对阿?
fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
地下室#
发布于:2002-10-31 09:50
抓包的工具可以帮你分析包是不是正确的。
mini
驱动牛犊
驱动牛犊
  • 注册日期2002-04-27
  • 最后登录2003-01-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-10-31 10:07
我也这样想的拉
我用上次台湾兄弟的EthView试过,被ping的一方收到命令和响应包都是好好的,发起ping的一方就是抓不到响应的包啊,可奇怪的是,我两边的驱动对上层的接口是完全一样的代码啊?
单独在miniport里把包打出来看,我觉得也是对的啊。
还有,miniportSend的函数里,我用softIce的packet命令可以把包显示出来,而发包给上层的时候packet就不行,而watch一个包也是可以看到的,why?
fracker兄,还有什么好办法可以用啊?多谢了
fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
6楼#
发布于:2002-10-31 12:35
你是不是做了加密啊?
对于一个ping包的正确以否,可以看rfc吧?
再者,最好用sniffer或者ethereal之类的工具察看,我没有用过EV,不知道效果如何,还有,你可以一端是没有你的东西的机器,另外一端是装了你的软件的机器看看。
mini
驱动牛犊
驱动牛犊
  • 注册日期2002-04-27
  • 最后登录2003-01-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-10-31 13:19
恩,我不是做的加密拉。我是用USB接蓝牙模块作为一个网卡,所以两边必须都是自己的东西才可以通的。
我会用Sniffer再试一试吧。
fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
8楼#
发布于:2002-10-31 13:38
ping的响应回来了,说明请求包和arp没有问题,我觉得还是应答包有错误。
fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
9楼#
发布于:2002-10-31 13:38
恩,我不是做的加密拉。我是用USB接蓝牙模块作为一个网卡,所以两边必须都是自己的东西才可以通的。
我会用Sniffer再试一试吧。

哦,呵呵,类似的东东我玩过。
mini
驱动牛犊
驱动牛犊
  • 注册日期2002-04-27
  • 最后登录2003-01-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-11-01 15:03
我用Sniffer试了一下,发现只能在能返回PING响应的机器上抓到PING的命令包,响应包就是看不见,而另一台机器上就哪个包包也看不到了!!我没有改动上层驱动发给的网卡驱动的任何包啊,难道协议驱动给下层的包也会是错误的么?
fracker老大,我下的一个sniffer程序,发现只有dll,就没有sys,不知道它是用什么方式来截获ip包的那?arp包好像是不能截到的。
真奇怪耶!你做过类似的东东啊,太好了,一定要多多帮忙,老板让我一个人搞这个,快搞死掉了 :(
mini
驱动牛犊
驱动牛犊
  • 注册日期2002-04-27
  • 最后登录2003-01-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-11-05 08:50
fracker,随便什么,给点意见拉!
fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
12楼#
发布于:2002-11-05 19:37
fracker,随便什么,给点意见拉!

不好意思,没在意这个贴子,还没有搞定吗?
fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
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的协议,这个协议就是用来抓包的。
fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
14楼#
发布于:2002-11-05 19:45
不过我只用DDK,从来不用DS的,我看你都使用的类的成员函数向上指示数据,应该不会错的。
游客

返回顶部