NDIS6过滤驱动的编写

NDIS6是在WINDOWS VISTA及之后版本的WINDOWS引入的,这时NDIS5的HOOK方式是无法使用的,MSDN推荐的方式是使用过滤驱动,其实也可以使用Intermediate(中间层驱动),下面谈一下它们的利弊,还有一些原理性的东西:
1.为什么NDIS6不动NDIS5的HOOK:

1.因为NDIS6使用了新的函数集和新的数据结构,最重要的是NET_BUFFER替代了NDIS_PACKET,原先所有的使用NDIS_PACKET的PROTOCOL或MINIPORT驱动的接口函数从此完全被报废。
其实对NDIS6也是可以进行HOOK的,但不稳定,通过对OPEN_BLOCK6等结构中的接口函数进行替换,可以对部分的协议驱动实现HOOK,注意:这几个函数都是使用新的NET_BUFFER结构来进行工作,其体函数名可以通过调试看出来,名称中包括List。有兴趣的人可以试一下,总的来说,这些函数与结构的变化比较大,很多工作方式都发生的变化,处理起来更加复杂。

2.IM驱动和过滤驱动相比,有什么利弊之分?
1.IM有最好的通用性,可以在WINXP,WIN2K,VISTA,WIN7中全面兼容,但它对VISTA与WIN7中的支持,是通过在通信函数中加入从NDIS_PACKET至NET_BUFFER转换层实现,所以性能在WIN7下应该是反而减弱了。
2.过滤驱动是直接使用NET_BUFFER来进行通信的,这种方式会有更好性能,主要的原因是NET_BUFFER使用了新的数据表示方法,避免的频繁的内存复制。具体可以参考MSDN。但很明显,它无法支持WINXP及之前的系统。

猜你喜欢

转载自blog.csdn.net/CharlesPrince/article/details/6113067