cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
阅读:2046回复:6

关于ndis三种驱动的功能和优缺点

楼主#
更多 发布于:2005-03-01 16:55
ndis支持三种驱动程序,他们的作用和优缺点各是什么呢?我如何来选择使用那一种驱动来开发我自己的程序?

先谢谢高手们帮忙!
走走看看开源好 Solaris vs Linux
suerdj2k
驱动牛犊
驱动牛犊
  • 注册日期2004-12-28
  • 最后登录2006-02-08
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-03-04 13:58
你先说说是那三种驱动?

我看你把他们看成是并列的地位了,其实他们是分层次的,不同层次的驱动负责不同的功能,他们互相配合一起来完成某些工作。
============================== 苏州工业园区 NDIS驱动 软件研发
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
板凳#
发布于:2005-03-06 11:59
他们是Miniport驱动程序、中间驱动程序、Protocol驱动程序?

我还有几个问题请教:

1 NDIS层获得数据包是链路层的桢数据吧,那么MAC地址的填写是在哪部分完成的呢?是NDIS库中完成的吗,包括发送ARP包?

2 使用NDIS―HOOK技术如何修改MTU呢?有的说可在MPQueryInformation函数中改,但那时编写NDIS驱动程序啊?是否可以编写NdisIMRegisterLayeredMiniport的钩子函数,改写NDIS_MINIPORT_CHARACTERISTICS结构的QueryInformationHandler的钩子函数?

走走看看开源好 Solaris vs Linux
lipluto
驱动牛犊
驱动牛犊
  • 注册日期2002-12-08
  • 最后登录2010-03-15
  • 粉丝0
  • 关注0
  • 积分74分
  • 威望47点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-03-07 22:21
1 NDIS层获得数据包是链路层的桢数据吧,那么MAC地址的填写是在哪部分完成的呢?是NDIS库中完成的吗,包括发送ARP包?

Miniport驱动程序向上发的包以太网包(如果是ethnet);MAC地址是由Protocol驱动程序完成的。

2 使用NDIS―HOOK技术如何修改MTU呢?有的说可在MPQueryInformation函数中改,但那时编写NDIS驱动程序啊?是否可以编写NdisIMRegisterLayeredMiniport的钩子函数,改写NDIS_MINIPORT_CHARACTERISTICS结构的QueryInformationHandler的钩子函数?

可以用中间驱动程序改写MTU。主要看你的程序要做什么了
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
地下室#
发布于:2005-03-08 09:05
1 也就是说MAC地址和ARP包是在tcpip.sys中完成的 了?

2 编写NDIS―HOOK驱动程序拦截数据包,发送自己的组包。但这是组包长度变大,有可能超过MTU。因此目的是改变系统MTU,如何做呢? 条件是:不使用注册表修改,编写NDIS―HOOK驱动程序,而不是NDIS驱动程序(miniport的QueryInformationHandler可以该MTU,但在NDIS―HOOK驱动中拦截不到有关MINIPORT函数,修改不了QueryInformationHandler)。

[编辑 -  3/8/05 by  cyliu]
走走看看开源好 Solaris vs Linux
lipluto
驱动牛犊
驱动牛犊
  • 注册日期2002-12-08
  • 最后登录2010-03-15
  • 粉丝0
  • 关注0
  • 积分74分
  • 威望47点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-03-08 12:07
2 编写NDIS―HOOK驱动程序拦截数据包,发送自己的组包。但这是组包长度变大,有可能超过MTU。因此目的是改变系统MTU,如何做呢? 条件是:不使用注册表修改,编写NDIS―HOOK驱动程序,而不是NDIS驱动程序(miniport的QueryInformationHandler可以该MTU,但在NDIS―HOOK驱动中拦截不到有关MINIPORT函数,修改不了QueryInformationHandler)。

我觉得还是使用系统默认的mtu比较好,你可以将大包拆成多个包处理。
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
6楼#
发布于:2005-03-08 12:25
拆包维护也比较麻烦啊。

因为各包路由可能不同,造成到达顺序不同 or 丢失。所以要维护包的生命周期的。

[编辑 -  3/8/05 by  cyliu]
走走看看开源好 Solaris vs Linux
游客

返回顶部