Windows XP SP2 防火墙控制器






4.82/5 (36投票s)
2005年7月6日
2分钟阅读

221015

5938
如何使用 COM 控制 Windows XP SP2 中包含的基础防火墙。
引言
Windows XP SP2 基本上有一个小型的防火墙。它很容易控制,但有时会让你感到困扰。当你的应用程序尝试连接到互联网时,Windows 会显示一个警告消息框,这会让用户觉得你的应用程序是一个广告软件。
为了防止这种情况,我建议你将你的程序添加到防火墙集合列表中。(此列表包含允许的程序。)
这个封装类非常简单、实用。你不再需要看到“安全警报”消息框了。
实现 - C++
这很简单。只需将 Windows XP 防火墙作为 COM 连接起来,然后执行你想要的操作即可。
FW_ERROR_CODE WinXPSP2FireWall::Initialize() { HRESULT hr = S_FALSE; INetFwMgr* fwMgr = NULL; INetFwPolicy* fwPolicy = NULL; FW_ERROR_CODE ret = FW_NOERROR; try { if( m_pFireWallProfile ) throw FW_ERR_INITIALIZED; /* Create an instance of the firewall settings manager. */ hr = CoCreateInstance( __uuidof(NetFwMgr), NULL, CLSCTX_INPROC_SERVER, __uuidof( INetFwMgr), (void**)&fwMgr ); if( FAILED( hr )) throw FW_ERR_CREATE_SETTING_MANAGER; /* Retrieve the local firewall policy. */ hr = fwMgr->get_LocalPolicy( &fwPolicy ); if( FAILED( hr )) throw FW_ERR_LOCAL_POLICY; /* Retrieve the firewall profile currently in effect */ hr = fwPolicy->get_CurrentProfile( &m_pFireWallProfile ); if( FAILED( hr )) throw FW_ERR_PROFILE; } catch( FW_ERROR_CODE nError) { ret = nError; } if( fwPolicy ) fwPolicy->Release(); if( fwMgr ) fwMgr->Release(); return ret; }
C++ 中的使用方法
使用起来非常简单。只需创建一个实例,然后调用 Initialize()
。确保在调用 CoInitialize()
之后调用 Initialize()
函数。你可以自己调用 Uninitialize()
,但析构函数也会调用该函数。另外,你应该知道,在调用 CoUninitialize()
之前,必须先调用 Uninitialize()
。
{ WinXPSP2FireWall fw; fw.Initialize(); wchar_t szApplication[MAX_PATH]; GetCurrentDirectoryW( MAX_PATH, szApplication ); #ifdef _DEBUG wcscat(szApplication, L"file://Debug//WindowsFirewall.exe"); #else wcscat( szApplication, L"file://Release//WindowsFirewall.exe"); #endif fw.AddApplication( szApplication, L"FireWallTest"); fw.RemoveApplication( szApplication ); fw.AddPort( 4321, NET_FW_IP_PROTOCOL_TCP, L"FireWallPortTest" ); fw.RemovePort( 4321, NET_FW_IP_PROTOCOL_TCP ); fw.Uninitialize(); }
C# 中的使用方法
C# 中的用法与 C++ 非常相似。但它不需要 COM 接口的 API,这使得在 C# 中实现它比在 C++ 中更容易。分配 WinXPSP2FireWall
的一个实例,并首先调用 Initialize()
。然后使用你想要的方法。就这些了!:)
Moah.WinXPSP2FireWall fw = new Moah.WinXPSP2FireWall();
fw.Initialize();
string strApplication = System.Environment.CurrentDirectory +
"\\WindowsFirewall.exe";
fw.AddApplication(strApplication, "FireWallTest");
fw.RemoveApplication(strApplication);
fw.AddPort(4321, NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP,
"FireWallPortTest");
fw.RemovePort(4321, NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP);
C++ 感谢
要编译此项目,你需要四个文件:netfw.h、netfw.idl、icftypes.h 和 icftypes.idl。你可以从 Windows XP SP2 PSDK 获取这些文件。或者,我已经将这些文件包含在下载中。你可以直接使用它们,而无需下载和安装 SDK。
C# 感谢
如果在使用 NetFwTypeLib 时出现错误,请添加对 hnetcfg.dll 的引用。你可以在 Visual Studio 中通过“项目 -> 添加引用... -> 浏览”来执行此操作,并且 DLL 文件通常位于“C:\Windows\System32\hnetcfg.dll”。
历史
- 2005年7月6日
- 首次发布。
- 2006年7月10日
- 添加了 Windows XP SP2 防火墙控制器的 C# 版本。