summer
驱动牛犊
驱动牛犊
  • 注册日期2001-04-16
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2256回复:2

接上篇--有关Passthru的问题!

楼主#
更多 发布于:2001-08-06 14:37
这里有关Passthru的问题很多,好像大家现在都再学习DDK中的这例子。
我觉得版主有必要做一个详细的总结让大家也都可以学习一下。
还有,我上篇贴子中的问题在这里继续讨论吧!
(不断加分)

最新喜欢:

sourensouren tomoretomore fsbfsb
数据载入中....请稍等
HuYuguang
论坛版主
论坛版主
  • 注册日期2001-04-25
  • 最后登录2013-04-29
  • 粉丝3
  • 关注1
  • 积分92分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2001-08-06 21:57
颓废的利害,干什么事情都没有劲,更没有心思贴什么代码,贴完代
码我还要解释,不过我可以给你点思路。

所谓思路,也不过是我自己代码里面的注释...

btw,passthru用NdisMEthIndicateReceive,是我说的第一种
方法,imdsample用的第2中方法。第2种方法会改变底层miniport
对协议层的动作,虽然效率高一点,但是不值得推荐。



// 原先的代码是用下面这个函数NdisMEthIndicateReceive,imd的协议层调用该函数,以imd的miniport身份通知ip层来了一个包,
// 让ip层去利用packetsize和lookaheadbuffersize确定是否需要调用imd的miniport transferdata
// 函数,imd的transfer data直接用imd的协议层的身份调用ndistransferdata,通知真正的miniport
// 把剩下的数据发过来,miniport发过来之后调用imd 的协议层的transferdatacomplete,imd的协议层
// 的transferdatacomplete利用imd的miniport身份调用ndismtransferdatacomplete,告诉ip层说我已经
// 把数据给你了,数据就在那些指针里面。

// 在这种结构下,有两种策略,第一种是继续按照原有代码的结构,完全仿真真正的miniport行为,
// 继续用transferdata结构,在imd的协议层的transferdatacomplete里面修改包内容,然后调用ndismtransferdatacomlete,

// 第2种方案是,屏蔽真正的miniport动作,在下面不调用这个函数,直接用imd的协议身份调用ndistransferdata,
// 让ndis去调用miniport的transferdata,miniport driver发送结束后就
// 会调用imd的协议层的transferdatacomplete,这样imd的协议层就得到所有数据,然后修改包内容,然后
// 用imd的miniport身份调用ndismindicatereceivepacket,
// 通知ip层说来了一个数据包。这样的话,ip层永远不会调用imd里面的miniport的transferdata函数,
// 这样做的效率节省了ip调用imd miniport的transferdata过程,效率相对要高一些。
不再回忆从前,我已经生活在幸福当中。
hustfyb
驱动牛犊
驱动牛犊
  • 注册日期2001-05-28
  • 最后登录2002-01-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-08-06 22:39
按照microsoft的建议
TransferData的方式迟早要被淘汰
如果写程序还是用NdisMIndicatePackets的方式比较好
而且分析起来也比较简单搞清楚一个NDIS_PACKET结构就
可以了,我觉得如果搞不清楚TransferData也没有什么关系
毕竟现在的网卡很少有注册MiniportTransferDataHandle了
底层都不支持了
上层更不用管了
再见了白云 永别了黄鹤
游客

返回顶部