mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
20楼#
发布于:2003-03-14 13:08
NdisTransferData(&Status, pAdapt->BindingHandle,
MacReceiveContext, LookBufSize + 1,PacketSize - LookBufSize,
Packet, &btCount);
if (Status == NDIS_STATUS_SUCCESS || Status == NDIS_STATUS_PENDING){

这个判断有问题吧。如果是pending,就一定要调用complete,如果不是,一定不会调用complete,

你在调用NdisTransferData的时候接收的是从lookaheadbuffersize+1处开始的内容,你在交给协议的packet中包括headbuffer和lookaheadbuffer里面的内容了么??
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
bluetiger
驱动牛犊
驱动牛犊
  • 注册日期2003-02-22
  • 最后登录2010-09-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望100点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
21楼#
发布于:2003-03-14 13:25
现在是当收到包长度和预览区的数据相等时,就不用调用NdisTransferData了,向上指数据也应该成功呀!可是现在什么都没有反映!
我当然要把头中的数据和预览区的数据考备到Packet 中了。
我也不知怎么办好了!

苦呀!!! :( :(
SharpShooter
驱动小牛
驱动小牛
  • 注册日期2002-04-07
  • 最后登录2013-07-05
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望40点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
22楼#
发布于:2003-03-14 14:01
[quote]我觉得没有这个必要吧!我试试!等一会!!
谢谢!!!! :) :) :)

非常的有必要,看DDK文档。 [/quote]
绝对没有必要!
写驱动不如买足彩!!
SharpShooter
驱动小牛
驱动小牛
  • 注册日期2002-04-07
  • 最后登录2013-07-05
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望40点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
23楼#
发布于:2003-03-14 14:40
按你所说,我调用了。
可是还是不行!!!
这可怎么办??????????????


你的代码我没细看,不过如果加载了你的Passthru,不当机的话真是菩萨保佑了!

先给你指出两个毛病:
1.你在收包的时候分配的Packet竟然用了全局变量!如果系统接连调用了两次或者多次PtReceive,然后再调用PtReceiveComplete的话,你怎么保证你的全局变量MyPacket里面的东西是好的?还有句话,你在这儿试过SpinLock,放心好了,SpinLock保护不了你的数据!

以前有过这方面的讨论,SpinLock讲的是CPU的拥有权,当一个CPU拥有一个SpinLock的时候,另一个CPU无法拥有它,但同一个CPU对同一个SpinLock的重复Acquire永远是可以成功的!

我想你使用全局变量的想法是因为PtReceiveComplete只有一个参数进来,那就是BindingContext,这个问题有两个办法解决。比较好的做法是初始化的时候分配一个Packet链,需要的时候Pop一个出来用,用完一个Push回去一个。链的Entry放到Adapt里面,说到这儿想到句话,就算你要用全局变量,为什么不考虑放在ADAPT里?再一个办法很简单,就是仿照Send过程,还是每次分配一个Packet,用局部变量就可以了,然后你不是想要Packet参数吗?那就不要处理PtReceiveComplete了,PtReceiveComplete里一句代码都不要,如果收到了整包,直接在PtReceive里Indicate上去,如果不是整包,就在TransferComplete里Indicate。

2. 收包如果收到整包,你必须记录你收到的Packet,就是OriginalPacket了,一般在Packet的ProtocolReserved域,然后在MPReturnPacket的时候作为参数向下调用NdisReturnPacket,让下面的驱动释放它的资源,这个我上回说的很清楚了吧。你的代码里原先也有,结果都被你注掉了!

还有,如果你总是整包向上递,则不需要支持MPTransferData,这个已经说过了,同样,在你的PtTransferDataComplete中也没有必要调用NdisMTransferDataComplete,直接Indicate了就可以了。

我觉得你的代码现在问题太多,还不到分析为什么不通的时候,静下心来好好理一理再说吧,关键要自己理解了流程。
写驱动不如买足彩!!
SharpShooter
驱动小牛
驱动小牛
  • 注册日期2002-04-07
  • 最后登录2013-07-05
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望40点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
24楼#
发布于:2003-03-14 14:45
调用NdisTransferData后,MiniPortTransDataComplete就没有响应过。(我保持原来的Passthru的部分没有动!)
看ddk文档上说,就好在此处处理数据,所以在处理完后,再向上批示数据。
SharpShooter也这么说得。而且我调用ndistransferdata后,MiniPortTransferDataComplete就没有响应过!我也不知为什么?
很郁闷呀!!
谢谢!!!

 :( :(

哥哥,你这是笔误还是真的?你还有MiniPortTransDataComplete?
我什么时候说过有这玩意儿?大伙儿写的都是ProtocolTransferDataComplete!
写驱动不如买足彩!!
bluetiger
驱动牛犊
驱动牛犊
  • 注册日期2003-02-22
  • 最后登录2010-09-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望100点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
25楼#
发布于:2003-03-18 11:22
MiniPortTransDataComplete我是写错了,当时急呀!
我的发送数据的部分以前没有问题。只是当初在写收数据时,没有通,就乱改一通了。所以很乱。
不过你写得还满牛的。
我正在试!谢谢!!

我也是刚学,现在还不到一个月。(刚好有一个月了)头儿崔得又紧。所以搞得很乱。真是谢谢!你在北京吗?方便的话请你吃饭了。还有上面的兄弟们。我再按你的方法试试,有什么问题再问你好吗?

3kS!!!!!!!!!!!!

对了,我看DDK上说对于接收和发送还有数据处理时,应该在初始化时分配好资源,所以我用了全局变量。你有什么处理办法吗?
SharpShooter
驱动小牛
驱动小牛
  • 注册日期2002-04-07
  • 最后登录2013-07-05
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望40点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
26楼#
发布于:2003-03-18 12:25
你在北京吗?方便的话请你吃饭了。还有上面的兄弟们。

什么时候你准备了鲍翅大餐再通知大伙儿吧,我想大伙儿都会去的,呵呵。


对了,我看DDK上说对于接收和发送还有数据处理时,应该在初始化时分配好资源,所以我用了全局变量。你有什么处理办法吗?

前面我说了:
比较好的做法是初始化的时候分配一个Packet链,需要的时候Pop一个出来用,用完一个Push回去一个。链的Entry放到Adapt里面。

不过这个办法到底好还是不好,也不好说了,相关的函数有:ExInterlockedPopEntrySList,ExInterlockedPushEntrySList,ExInterlockedInsertTailList,ExInterlockedRemoveHeadList等可以用,以及两个常用的宏:FIELD_OFFSET、CONTAINING_RECORD也是很有用的。

写驱动不如买足彩!!
bluetiger
驱动牛犊
驱动牛犊
  • 注册日期2003-02-22
  • 最后登录2010-09-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望100点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
27楼#
发布于:2003-03-18 17:01
我想我是没有这样的机会请大家了。不得把我吃成了穷光蛋呀!

按你所说得我又改了,可是还是不通。
主要是向上传数据,调用了NidsMIndicateReceivePacket()后就没有了反应。
头儿今天又向我要东东了。说最晚不得超过20号,我可怎么办呀!

按你所说,如果成功上传数据后,我的程序会有问题。可是现在我上传后就没有了反应。

苦呀!!

把你的上传数据代码让我借鉴一下好吗?(如果有的话!!!)
谢谢!!!!:D :D :D
 :( :( :( :(
bluetiger
驱动牛犊
驱动牛犊
  • 注册日期2003-02-22
  • 最后登录2010-09-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望100点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
28楼#
发布于:2003-03-18 17:15
还有我发现,调用NdisTransferData()时,Packet有问题。
我分配的Packet内的Buffer链如下:
14
LookAheadBufferSize
PakcetSize - LookAheadBufferSize
也就是三个。
我先HeaderBuffer和LookAheadBuffer的数据拷贝到Packet 中

每当PakcetSize > LookAheadBufferSize时调用NdisTransferData()
它会成功(状态是NDIS_STATUS_SUCCESS)反回(收到的数据是其它的机器的广播数据)。此时Packet 的数据是这样的,剩余的数据不是放在第三个Buffer 上而是从第一个Buffer 开始。我又看了一下MiniPortTransferData()中的Packet中的数据,与上面的情况一致!

真是苦脑呀!!大家有没有成功的代码吗?给我一小部分,就可以呀,还需要花银子吗???

我快要翘缏子了!

 :( :( :( :( :( :( :( :(

[编辑 -  3/18/03 by  bluetiger]
SharpShooter
驱动小牛
驱动小牛
  • 注册日期2002-04-07
  • 最后登录2013-07-05
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望40点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
29楼#
发布于:2003-03-18 17:57

此时Packet 的数据是这样的,剩余的数据不是放在第三个Buffer 上而是从第一个Buffer 开始。我又看了一下MiniPortTransferData()中的Packet中的数据,与上面的情况一致!


你已经看到数据从第一个Buffer开始,就配合它一下好了:进入PtReceive如果NdisGetReceivedPacket失败,不要急着Copy数据,先判断PacketSize和LookAheadBufferSize的大小,如果需要NdisTransferData,则直接分配一个足够大的Buffer,记住就一个,不要做成Mdl链(如果预先分配的话就给个合适的大小了,比如1514)。然后再往这个Buffer里Copy已有的数据,将偏移量填在NdisTransferData的参数里就好了。

总之一句话,传递给NdisTransferData的Packet上就挂一个Buffer!
写驱动不如买足彩!!
SharpShooter
驱动小牛
驱动小牛
  • 注册日期2002-04-07
  • 最后登录2013-07-05
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望40点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
30楼#
发布于:2003-03-18 18:09
好累!

我的代码牵扯太多,本想整理个清晰点的给你,实在是哥们也忙得很,经常加班到半夜,不过你也不用非要我的吧,论坛里贴代码的帖子也不少,离你不到三步远不就有代码嘛,别人贴出来的,肯定是好的。
http://www.driverdevelop.com/forum/html_36566.html?1047981523
写驱动不如买足彩!!
bluetiger
驱动牛犊
驱动牛犊
  • 注册日期2003-02-22
  • 最后登录2010-09-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望100点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
31楼#
发布于:2003-03-19 09:56
谢谢!!!
真是谢谢!!!
看来你比我还苦呀!
等我看完了,我试试!等通过了。真得请你吃饭了!!
 :D :D :D :D :D :D :D :D :cool: :cool: :cool: :cool: :cool: :cool: :cool:
bluetiger
驱动牛犊
驱动牛犊
  • 注册日期2003-02-22
  • 最后登录2010-09-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望100点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
32楼#
发布于:2003-03-19 12:50
成功了!!哈哈!真是乐开怀呀!

 :cool: :cool: :cool: :cool: :P :P :P :P :o :o :o :o :D :D :D :D :D :D :) :) :) :D :D :D
magicx
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2014-08-18
  • 粉丝1
  • 关注0
  • 积分-14分
  • 威望13点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
33楼#
发布于:2003-03-19 22:09
成功了!!哈哈!真是乐开怀呀!

 :cool: :cool: :cool: :cool: :P :P :P :P :o :o :o :o :D :D :D :D :D :D :) :) :) :D :D :D


又是一个没看文档的
[color=red]大头鬼! :P[/color]
上一页 下一页
游客

返回顶部