IT人
相关图书

怎样在C#中调用WindowsXP SP2下提供的防火墙设置组件?

编辑: 文章来源: 发布日期:2007-5-12 人气:

主要目的是为了实现在系统运行时,自动将自身可执行文件添加到SP2自带的防火墙的例外列表中。

MSDN中说有关防火墙的API是一组COM组件,由%SYSTEM32%\hnetcfg.dll实现。在工程中添加该dll的引用,发现生成的类型库中全是interface,没有CoClass,也就是说我没办法new一个实例然后利用它去实现我期望的功能。

遇到这种情况,在VB中可以用CreateObject,利用COM组件的ClassFactory去创建,C#下不知道有没有什么对等的方法,期望各位DX指教。
或者我引用的方法不正确,有其他的方式可以用C#设置Windows XP SP2自带的防火墙。

期望各位的答复,先谢过了!

---------------------------------------------------------------

直接调用楼主所说的dll似乎不行。
我换了一个思路来看待这个问题,希望对楼主有所帮助。
这里我只说思路,不谈具体的实现,请见谅。

1.一般情况下,要永久保存程序的设置,有这么3个地方:配置文件、注册表、

数据库。下面我们来一一尝试,看windows防火墙的设置保存在哪里,以及具体

的设置格式是怎么样的。

2.先来看看设置是否保存在某个配置文件中:
(1)打开“控制面板”,运行其中的“windows防火墙”(其程序位置为

x:\windows\system32\FireWall.cpl),随便修改一下设置,然后保存并退出;
(2)用windows自带的“搜索”工具来查找最近修改过的文件,我们可以发现文

件x:\windows\system32\config\system是刚才修改过的。而它正好是保存注册

表信息的文件,OK,现在基本可以确定windows防火墙的设置保存在注册表里面

了。
(注意:也可以用文件监视工具来跟踪文件的修改情况)
3.请打开注册表编辑器,我们将要在这里来探索一番:注册表结构庞杂,如果要

找到某项信息,我一般采用2种方式:(a)按照注册表的层次结构来找(需要熟

悉注册表的结构,并预先已经知道信息的存放位置);(b)在注册表中查找指

定的关键字(关键字可以是需要查找的项目名,也可以是项目中显示的字符串)

。因为我不知道防火墙的设置保存在哪里,所以我采用方法(b)来查找。
(1)让注册表搜索关键字“FireWall”,我们可以找到很多符合条件的键,其

中[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001

\Services\SharedAccess\Parameters\FirewallPolicy]就是我们的目的地。
下面我们来分析一下,防火墙设置的保存方式。
(注意:也可以用注册表监视工具来跟踪注册表的修改情况)
4.防火墙设置在注册表中的保存方式
(1)如上所述,防火墙的设置保存在

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001

\Services\SharedAccess\Parameters\FirewallPolicy]中,其他的设置都相对

它,下面我就不写这一上串字符,而用相对位置来表示了。
(2)启用(关闭)防火墙:键[StandardProfile] 数值名称 EnableFirewall 

数值类型 REG_DWORD 数值数据 1-启用防火墙 0-关闭防火墙
(2)不允许例外:键[StandardProfile] 数值名称 DoNotAllowExceptions 数

值类型 REG_DWORD 数值数据 1-不允许例外 0-允许例外
(3)防火墙阻止程序时是否显示通知:键[StandardProfile] 数值名称 

DisableNotifications 数值类型 REG_DWORD 数值数据 1-显示通知 0-不显示通


(4)例外中的程序列表:
键 [DomainProfile\AuthorizedApplications\List]和

[StandardProfile\AuthorizedApplications\List]
数值类型  REG_SZ
数值名称  程序的完整路径文件名
数值数据  程序完整路径文件名:网络范围:是否允许访问网络:显示名称
(a)程序完整路径文件名:例如,d:\windows\avserve2.exe
(b)网络范围:
(b.1)任何计算机(无限制):*
(b.2)仅我的网络(子网):LocalSubNet
(b.3)自定义列表:以逗号分隔的IP地址,子网或同时包括IP地址、子网的列

表(例如:192.168.114.201,192.168.114.201/255.255.255.0)
(c)是否允许访问网络:Enabled 允许 Disabled 禁止
(d)显示名称:显示在例外列表中的名称,一般为程序版本信息中的产品名称

或者不包括扩展名的文件名
(5)端口列表:不能直接在设置程序显示出来,但是确实存在
键 [DomainProfile\GlobalOpenPorts\List]和

[StandardProfile\GlobalOpenPorts\List]
数值类型  REG_SZ
数值名称  端口:协议类型
数值数据  端口:协议类型:网络范围:是否允许访问网络:显示名称
(a)端口:0~65536之间的数值
(b)协议类型:TCP或者UDP
(c)其余同(4)中的解释

5.要调用windows防火墙的设置:直接运行x:\windows\system32\FireWall.cpl

即可。

6.要在自己的程序中设置防火墙:修改4中的注册表项。


-------------------------------------------------------------
有关创建实例,我已经找到方法了。

TypetypFwMgr = null;
NetFwTypeLib.INetFwMgriFwMgr = null;

typFwApp = Type.GetTypeFromCLSID(new Guid("{EC9846B3-2762-4A6B-A214-6ACB603462D2}"));
iApp = (NetFwTypeLib.INetFwAuthorizedApplication) Activator.CreateInstance(typFwApp);
具体说明可以参照下面的文章
http://blog.csdn.net/Mittermeyer/archive/2006/05/19/745856.aspx

相关文章
    网友对“怎样在C#中调用WindowsXP SP2下提供的防火墙设置组件?”的评论
    已有位网友对本文发表评论,下面显示最近10条评论。 查看所有评论
    昵称:
    评论内容:
    Copyright ◎ 1998 - 2007 编程资料网 All Rights Reserved