阅读:3529回复:4
关于NDIS的协议层驱动程序和中间层驱动程序的一些看法
我是一个软件开发人员,主要用VC开发比较上层的东西,但对底层非常爱好,喜欢汇编,SOFTICE,对98和NT的NDIS有一些研究,以下就粗略谈谈,不对之处请各位指正。
不知道大家对IPMAN和NTSNIFF及NT下的网络监视器熟悉么?它们都是一些应用程序,调用了底层的设备驱动程序,98下是VPACKET.VXD,可以直接调用,动态装载;NT下是SYS,必须安装,重新启动。这些设备驱动程序的源代码都在DDK下PACKET里,98下面的似乎有BUG,它编译后,生成的VXD比IPMAN调用的要小(为什么?我还没有研究过,希望那位大侠能够指点)。它们都是协议层驱动程序,也就是PROTOCTAL DRIVER,它编译的东西和TCPip.sys是一个层次的,如果底层的微端口驱动程序和网卡驱动程序收到数据,会通知它和TCPip.SYS来收,所以,你(ipman)能够收得到,系统安装的TCP/IP也能够收到,即数据流向是网卡(收到包)->网卡DRIVER->某些微端口驱动程序->????,它会到两个地方,如果你安装或动态装载了你的NDIS协议层驱动程序,一个就是到你的驱动程序,还有一个当然是系统的tcpip栈,即tcpip.sys,HAHA!!!所以你希望通过它来做包过滤,防火墙,显然不现实。那怎么才能够做包过滤呢? 除了重写TCP,98下有两种方式,一种是用VMM的Hook_Device_Service,天网似乎就是这样的,还有一种就是中间层驱动程序,(这两种我都没有试过),NT下(下面全都是NT的,我也仅在NT下开发过)许多软件防火墙都是采用这种,但它们需要NDIS4.0,什么是中间层驱动程序,就是在两层驱动程序中间插入一层,试想如果你写一个驱动程序,它在协议层驱动程序和微端口驱动程序之间,但它分别注册成协议层驱动程序和微端口,又分别绑定,那么,这个驱动程序就是一个混杂物,它对上面的协议层驱动程序(如tcp.sys和你自己写的)来说,是一个微端口驱动程序,对下面的来说,它又是一个协议层驱动程序,编译安装成功后,你在控制面板设置网络,在修改绑定,将NT系统的绑定顺序改成你的,那么就可以实现如下数据流向:网卡(收到包)->网卡DRIVER->某些微端口驱动程序->你的IMDRIVER(即中间层驱动程序)->tcp.sys,反向也仅此一条路,那么你在你的IMDRIVER中就可以加入包过滤了,你的NT防火墙也就有点眉目了!! 在NTDDK的帮助系统下面有较详细的阐述,你可以看看! 请各位指正! |
|
|
沙发#
发布于:2001-09-29 21:35
能不能详细说明一下ddk帮助文件的位置,最好是有一个简单的模版,能够显示出tcp/ip和网卡到中间层的数据
|
|
板凳#
发布于:2003-10-03 21:58
我也想要一份!能告诉一声吗?
|
|
|
地板#
发布于:2003-10-05 20:53
就是这个意思,来点图更易理解:
|
|
地下室#
发布于:2004-07-07 18:14
搂主:能不能看看这张贴子? 希望给点一点!
http://www.driverdevelop.com/forum/html_72448.html?1089171822 |
|
|