阅读:3598回复:8
关于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-04-08 21:24
我要在NT下开发包过滤的程序,我在98下装了天网,可是它的监听功能好像不管用
|
|
板凳#
发布于:2001-04-09 08:01
它的ICMP过滤是有用的,不过TCP监听好像不行。
|
|
地板#
发布于:2001-04-16 19:09
NDIS的中间层驱动程序怎样和应用程序通讯?请高手指教。
|
|
地下室#
发布于:2001-08-03 21:08
:它们都是一些应用程序,调用了底层的设备驱动程序,98下是
:VPACKET.VXD,可以直接调用,动态装载; :"NT下是SYS,必须安装,重新启动。" 我现在光看程序,也生成了。SYS文件,可不知道安装SYS呢,请大侠赐教!!! |
|
|
5楼#
发布于:2001-10-13 18:59
我是新手,在DDK中描述的是Intermediate driver在Miniport driver和Transport driver 之间,而不是在Miniport driver和protocol driver 之间,不知对此该怎样理解?
|
|
6楼#
发布于:2001-10-13 20:01
哎~~~protocol和transport是同一层啊~~不过就是不同叫法罢了!一个是描述他的应用,一个是描述他的本质。不过我到想问问各位大虾,IM和MP能被WIN32直接调用么?好象ddk里的passthru和e100bex都没有讲怎么被WIN32直接调用。另外问什么软件能比较好的把反汇编出来的ASM变成C?
|
|
|
7楼#
发布于:2007-04-17 15:58
说的不错啊
|
|
8楼#
发布于:2007-05-07 01:37
总结的很好,最近都在干这个
很有启发 |
|