AppleSeeker's Tech Blog
Welcome to AppleSeeker's space
Vista下的防火墙的访问和XP访问方式有很大区别
XP有2种方法,但是Vista下目前还没有比较全面能够分析防火墙的所有设置
先将我的个人心得和大家分享下

1。通过注册表方式访问:

防火墙的很多设置都存放在注册表中,具体的键值如下:
在HKEY_LOCAL_MACHINE\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy下DomainProfile中的内容为机器加入域后存放的信息
StandardProfile中的内容为机器不加入域存放的信息

在这2个key下同样有3个键值
EnableFirewall:防火墙开启
DoNotAllowExceptions:不允许例外
DisableNotifications:提示信息

在这2个Key下也有2个子键
AuthorizedApplications:允许通过的应用程序
GloballyOpenPorts:打开的端口

用注册表的方式访问XP的防火墙设置基本上都能取得正确,但此方法在Vista下很大程度上不适用。
Vista在注册表的键值上改变很多,对注册表的改变,并不能使得防火墙的设置发生变化。
大家有兴趣的话可以自己试试,Vista下的注册表键值:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess
这目录下有default和Parameters两个子键目录,都存放着相应的设置。

2。通过dll方式访问:

.net开发需要用到hnetcfg.dll
c/c++开发还需要用到头文件netfw.h,XP和Vista都需要下载对应的SDK,才有该头文件

这里就介绍.net开发细节,将该dll加入工程后,在工程引用上会出现3个命名空间,分别是NATUPNPLib,NETCONLib,NetFwTypeLib
防火墙的设置都在NetFwTypeLib中,其余2个大家有兴趣可以自己研究研究。
用到的主要接口:
INetFwAuthorizedApplications:允许通过的所有应用程序
INetFwServices:允许通过的所有的服务及服务端口
INetFwPolicy:防火墙策略
INetFwProfile:防火墙设置
INetFwMgr:防火墙的管理类吧

NetFwTypeLib该命名空间下都是接口,只能通过反射方式获得类实例,入口为INetFwMgr。

参考代码:

其中Type.GetTypeFromCLSID表示获取与指定类标示符关联的类型。
guid的取得,我是通过查注册表取得的,可以搜索命名空间。
这种方式不是特别好,如果有更好的方法,希望告知,谢谢。

这种方式访问防火墙,XP下完全没有问题,Vista下,除了用户自己添加的应用程序和服务端口无法获得外,其它都能获得,用户自己添加的应用程序和服务端口同样在注册表中没有找到,可能还是存放的位置问题。以后会对该文章进行补充说明。

参考文章:
.net:http://blog.csdn.net/mittermeyer/archive/2006/05/19/745856.aspx
c/c++:http://blog.csdn.net/Y___Y/archive/2007/03/22/1537493.aspx


2007/7/11补充:
用dll方式访问,在vista下开发的话,直接用windows\system32下的firewallapi.dll
将该dll加入后,在工程引用上只会出现1个命名空间,即NetFwTypeLib

搜索注册表的CLSID方法,搜索firewall即可。只要搜索到一个CLSID中有3个子键目录,其中最后一个为ProgID,里面有唯一的键值,即保存该类名称。
posted on 2007-07-10 17:12  AppleSeeker(冯峰)  阅读(3034)  评论(8编辑  收藏  举报