zuozi
驱动牛犊
驱动牛犊
  • 注册日期2003-03-24
  • 最后登录2004-09-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2318回复:13

求救!!!!在passthru里面的ptreceive函数中采用ndis发送自定义包的问题!!!!大侠们,看一眼吧!50分!

楼主#
更多 发布于:2003-04-19 18:13
我用passthru做包的判断转发,在ptreceive里面截获包然后解析包头,当发现特定包的时候,就组装一个自己的包发出去,现在我其他的地方都基本完成了,就是每次调用NdisSend()就直接重起了,也没有蓝屏,下面是我程序的几个改动passthru的地方
1。截获包和包的解析都是按照论坛上以前有的思路做的,没有问题。
2。参看以前的文章,据说因为mpsend和ptsendcomplete的分配释放资源格式问题,如果直接在ptreceive调用ndissend会蓝屏,所以我修改了mpsend和ptsendcomplete函数,让他们也和截获包时候的处理一样,对于mpsend所收到的包,不是将一个packet指针连到原包上发送,而是重新分配内存,将整个包copy过去之后再发送我所拷贝的包,然后根据是否返回pending选择在mpsend或者是ptsendcomplete中释放我所分配的资源。修改完后,我调试了一下,发现没有问题,都很正常。
3。最后我在ptreceive中做判断,收到满足特定条件的包的时候就调用自己的发包函数。这个函数中,我自己分配一段memory,填写mac头,ip头,tcp头,数据,然后调用ndissend,然后根据返回值在这个函数或者是ptsendcomplete中释放自分配的资源。
4。当我把ndissend语句删掉时,一切都很正常,可以看到我自己定义的资源分配然后释放,就是一加上ndissend就直接重起了。
各位大侠分析看看会是什么原因?多谢了!!!

另外,我自己怀疑问题出在ndissend的调用参数上,这里我有一个问题一直不懂,在mpsend中发包的时候,ndissend的handle应该是这样的:padapt=(PADAPT)MiniportAdapterContext->pSecondaryAdapt
    ndissend(&Status,pAdapt->BindingHandle, MyPacket);

然而在ptreceive中我们得到的是pAdapt =(PADAPT)ProtocolBindingContext,那我们在这里应该怎样得到MiniportAdapterContext哪?我就一直搞不明白,得不到的话,调用ndissend的时候第二个参数怎么写哪??我的英文比较差,看ddk看得不太明白,这两个Context到底是什么关系,又是怎么使用的,我一直不太明白。
希望各位大侠指点!!!!!小弟这里有礼了!!!!



[编辑 -  4/19/03 by  zuozi]
zuozi
驱动牛犊
驱动牛犊
  • 注册日期2003-03-24
  • 最后登录2004-09-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-04-20 20:13

为什么没人理我呀,大侠们?呜呜~~~~

我现在是直接用ptreceive中间得到的pAdapt来做的,就是把这个pAdapt->BindingHandle作为参数用了,现在是不死机了,但是收不到包:(我在ptsendcomplete里面跟踪到了发送包的状态是success但是在目的机器上就是收不到包。

我实验用的包是把ping包拷贝了一下,然后发到对方那里去,但是就是收不到,哪位大侠能够讲讲为什么?多谢!!

另外我想知道mac头上的目的地址和源地址都怎么写呀,直接写网卡的mac地址是么?可是我用sniffer看我得机子上ping包的mac地址好像不是网卡的mac地址呀,这是为什么?
如果我直接用网卡的mac地址让两台机子之间互相跑,可以么?

各位指点迷津呀!!!
matcn
驱动牛犊
驱动牛犊
  • 注册日期2003-04-21
  • 最后登录2003-04-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-04-21 01:31
我也在学习中,路真艰难。求人不如求己。

你的情况也许和别人不一样,无从下手。解决之后就是升华。
cyran
驱动中牛
驱动中牛
  • 注册日期2001-09-28
  • 最后登录2009-02-24
  • 粉丝0
  • 关注0
  • 积分101分
  • 威望20点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-04-21 09:13
zuozi老兄,我正在做一个程序,很需要你的经验!

如果可以的话,请联系!

QQ:8289990
email:cyran@sohu.com
zuozi
驱动牛犊
驱动牛犊
  • 注册日期2003-03-24
  • 最后登录2004-09-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-04-21 16:26
各位大侠出来帮忙呀,现在我已经几乎肯定问题出在哪里了,可是就是不会改正 :(

我今天用ad hoc的网卡,直接在包头写mac地址对着发包,但是发现我自己定义的发包函数虽然返回pending并且在ptsendcomplete中返回success,但是实际上对方并不能接收到包,但是我把mpsend改掉发同样的包时,发现可以发出去并且成功的接收到,因此我觉得我得问题是在调用NdisSend时的第二个参数有问题。

我参照passthru里面的源代码,mpsend调用Ndissend的时候用的是系统给的MiniportAdapterContext。然后采用了:

pAdapt=(PADAPT)MiniportAdapterContext
pAdapt->pSecondaryAdapt
ndissend(&Status,pAdapt->BindingHandle, MyPacket);


然而在ptreceive中我们得到的是ProtocolBindingContext。这时有
pAdapt =(PADAPT)ProtocolBindingContext
那么这个时候调用NdisSend函数的话,第二个参数怎么写呢?

以前的帖子有大侠说可以在ptreceive里面用ndissend,但是没有讲如何得到MiniportAdapterContext,我是菜鸟,各位指点一下吧,我真的很郁闷呀 :(多谢!!!
cyran
驱动中牛
驱动中牛
  • 注册日期2001-09-28
  • 最后登录2009-02-24
  • 粉丝0
  • 关注0
  • 积分101分
  • 威望20点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-04-21 16:39
zuozi兄,如果可以的话,把你的联系方式留一下
zuozi
驱动牛犊
驱动牛犊
  • 注册日期2003-03-24
  • 最后登录2004-09-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-04-21 19:08
mail:yangfanzuoz99@mails.tsinghua.edu.cn
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-04-22 10:27
你干吗用padapt=(PADAPT)MiniportAdapterContext->pSecondaryAdapt
ndissend(&Status,pAdapt->BindingHandle, MyPacket);

你为什么要pSecondaryAdapt????你收发包用的不是一块网卡么?还是你做的LBFO??

学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
cyran
驱动中牛
驱动中牛
  • 注册日期2001-09-28
  • 最后登录2009-02-24
  • 粉丝0
  • 关注0
  • 积分101分
  • 威望20点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-04-22 12:25
mail:yangfanzuoz99@mails.tsinghua.edu.cn


zuozi老兄,你的这个邮箱我的邮件无法送达
麻烦您再给个邮箱!thx
punk
驱动小牛
驱动小牛
  • 注册日期2001-04-07
  • 最后登录2018-06-01
  • 粉丝0
  • 关注0
  • 积分621分
  • 威望164点
  • 贡献值0点
  • 好评度60点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-04-23 11:50
在PtBindAdapter中调用的NdisOpenAdapter这个返回的应该是一个
小端口的hanle :)
不停学习
zuozi
驱动牛犊
驱动牛犊
  • 注册日期2003-03-24
  • 最后登录2004-09-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-04-23 16:56
To mikeluo大侠:多谢你的建议,我今天发现问题了,我的机子上装了两块网卡,一块有线一块无线,我做的东西在无线网卡上面跑,但是我没有把有线网卡禁用掉,所以就收不到包了,不过我现在还是有点不大理解,为什么不把有线网卡禁用就看不到包呢,passthru应该可以截获所有的包才对吧
顺便放分,多谢!
zuozi
驱动牛犊
驱动牛犊
  • 注册日期2003-03-24
  • 最后登录2004-09-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-04-23 16:56
To mikeluo大侠:多谢你的建议,我今天发现问题了,我的机子上装了两块网卡,一块有线一块无线,我做的东西在无线网卡上面跑,但是我没有把有线网卡禁用掉,所以就收不到包了,不过我现在还是有点不大理解,为什么不把有线网卡禁用就看不到包呢,passthru应该可以截获所有的包才对吧
顺便放分,多谢!

To cyran:不好意思,我写错了,是yangfanzuozi99@mails.tsinghua.edu.cn
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-04-23 17:22
你的passthru binding到那块有线网卡上了么?
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
zuozi
驱动牛犊
驱动牛犊
  • 注册日期2003-03-24
  • 最后登录2004-09-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-04-23 18:46
我加载passthru的时候好像自动就把两块网卡都绑定了
游客

返回顶部