AppleSeeker's Tech Blog
Welcome to AppleSeeker's space
posts - 40,  comments - 359,  trackbacks - 2
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 阅读(2115) 评论(8)  编辑 收藏 所属分类: .Net

FeedBack:
2007-07-11 09:22 | 幸世建 [未注册用户]
我是划时代的人
  回复  引用    
2007-07-11 09:23 | 幸世建 [未注册用户]
哦积极机
  回复  引用    
2008-03-12 16:24 | xuyan      
你的NetFwTypeLib中有没有INetFwPolicy2接口呢,我看网上说要设置vista的防火墙需要这个接口 可NetFwTypeLib没有啊
  回复  引用  查看    
#4楼 [楼主]
2008-03-12 21:58 | appleseeker      
@xuyan
有的,你添加windows\system32\firewallapi.dll,有该接口的。vista下测试过的。你再看一下。
  回复  引用  查看    
2008-03-12 22:20 | xuyan      
@appleseeker
你使用vista开发的吗?我用xp添加firewallapi.dll后只有INetFwPolicy接口 没有INetFwPolicy2

  回复  引用  查看    
#6楼 [楼主]
2008-03-12 23:41 | appleseeker      
@xuyan
xp下是没有的,虽然添加了该dll,但由于涉及到的防火墙不一致,所以可能会没有该接口。
在vista下肯定会有的。
另外你可以检查下该dll的版本。
  回复  引用  查看    
2008-03-13 08:42 | xuyan      
@appleseeker
谢谢楼主我大概明白了,我在vista下试试吧
  回复  引用  查看    
#8楼 [楼主]
2008-03-13 09:04 | appleseeker      
@xuyan
我以前做过试验,把vista下的dll拿到xp下,尝试使用,但可惜不行,没有达到预期效果。防火墙和自动更新这些dll都依赖于别的dll,所以,即使使用高版本的,仍然不可能达到效果。

如果还有什么不明白的,可以告诉我。
  回复  引用  查看    
AppleSeeker

MSN:appleseeker@hotmail.com
Mail:appleseeker@gmail.com

精品女装淘宝店


<2008年3月>
2425262728291
2345678
9101112131415
16171819202122
23242526272829
303112345

与我联系

常用链接

留言簿(7)

我参与的团队

我的标签

随笔分类(63)

随笔档案(40)

Mobile Blog

最新随笔

搜索

  •  

积分与排名

  • 积分 - 88655
  • 排名 - 405

最新评论

阅读排行榜

评论排行榜

60天内阅读排行