阅读:2046回复:6
关于ndis三种驱动的功能和优缺点
ndis支持三种驱动程序,他们的作用和优缺点各是什么呢?我如何来选择使用那一种驱动来开发我自己的程序?
先谢谢高手们帮忙! |
|
|
沙发#
发布于:2005-03-04 13:58
你先说说是那三种驱动?
我看你把他们看成是并列的地位了,其实他们是分层次的,不同层次的驱动负责不同的功能,他们互相配合一起来完成某些工作。 |
|
|
板凳#
发布于:2005-03-06 11:59
他们是Miniport驱动程序、中间驱动程序、Protocol驱动程序?
我还有几个问题请教: 1 NDIS层获得数据包是链路层的桢数据吧,那么MAC地址的填写是在哪部分完成的呢?是NDIS库中完成的吗,包括发送ARP包? 2 使用NDIS―HOOK技术如何修改MTU呢?有的说可在MPQueryInformation函数中改,但那时编写NDIS驱动程序啊?是否可以编写NdisIMRegisterLayeredMiniport的钩子函数,改写NDIS_MINIPORT_CHARACTERISTICS结构的QueryInformationHandler的钩子函数? |
|
|
地板#
发布于: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。主要看你的程序要做什么了 |
|
地下室#
发布于: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] |
|
|
5楼#
发布于:2005-03-08 12:07
2 编写NDIS―HOOK驱动程序拦截数据包,发送自己的组包。但这是组包长度变大,有可能超过MTU。因此目的是改变系统MTU,如何做呢? 条件是:不使用注册表修改,编写NDIS―HOOK驱动程序,而不是NDIS驱动程序(miniport的QueryInformationHandler可以该MTU,但在NDIS―HOOK驱动中拦截不到有关MINIPORT函数,修改不了QueryInformationHandler)。
我觉得还是使用系统默认的mtu比较好,你可以将大包拆成多个包处理。 |
|
6楼#
发布于:2005-03-08 12:25
拆包维护也比较麻烦啊。
因为各包路由可能不同,造成到达顺序不同 or 丢失。所以要维护包的生命周期的。 [编辑 - 3/8/05 by cyliu] |
|
|