#ifndef __WINDOWS_FIREWALL__ #define __WINDOWS_FIREWALL__ /************************************************************************/ /* Copyright (C), 2016-2020, [Jeff], 保留所有权利; /* 模 块 名:防火墙模块; /* 描 述:; /* /* 版 本:[V]; /* 作 者:[Jeff]; /* 日 期:[5/8/2017]; /* /* /* 注 意:该模块函数,只适用于Windos Vista以下系统; /* /* 修改记录:[Jeff]; /* 修改日期:; /* 修改版本:; /* 修改内容:; /************************************************************************/ #include class WinFireWall { public: // 初始化防火墙; virtual BOOL FirewallInit() = 0; // 释放防火墙; virtual void FirewallCleanup() = 0; // 防火墙是否开启; virtual BOOL FirewallIsOn() = 0; // 开启防火墙; virtual BOOL FirewallTurnOn() = 0; // 关闭防火墙; virtual BOOL FirewallTurnOff() = 0; // 应用程序是否允许通过防火墙; virtual BOOL FirewallAppIsEnable(IN LPCTSTR lpProcessFileName) = 0; // 添加应用程序允许通过防火墙; virtual BOOL FirewallAddApp(IN LPCTSTR lpRuleAppPath, IN LPCTSTR lpRuleName) = 0; virtual BOOL FirewallAddAppVista(IN LPCTSTR lpRuleAppPath, IN LPCTSTR lpRuleName, IN LPCTSTR lpRuleDescription = NULL, IN LPCTSTR lpRuleGroupName = NULL) = 0; // 端口号是否允许通过防火墙; virtual BOOL FirewallPortIsEnable(IN LONG lPortNumber, IN NET_FW_IP_PROTOCOL netProtocol) = 0; // 添加端口允许通过防火墙; virtual BOOL FirewallAddPort(IN LONG lPortNumber, IN NET_FW_IP_PROTOCOL netProtocol, IN LPCTSTR lpName) = 0; virtual BOOL FirewallAddPortVista(IN LPCTSTR lpRulePorts, IN LPCTSTR lpRuleInterfaceType, IN LPCTSTR lpRuleName, IN LPCTSTR lpRuleDescription = NULL, IN LPCTSTR lpRuleGroupName = NULL) = 0; // 获取最后的错误值; virtual HRESULT HGetLastError() = 0; }; // Vistar以下操作系统; class WinFireWallXP:public WinFireWall { HRESULT m_hr; public: WinFireWallXP(); ~WinFireWallXP(); public: // 初始化防火墙; BOOL FirewallInit(); // 释放防火墙; void FirewallCleanup(); // 防火墙是否开启; BOOL FirewallIsOn(); // 开启防火墙; BOOL FirewallTurnOn(); // 关闭防火墙; BOOL FirewallTurnOff(); // 应用程序是否允许通过防火墙; BOOL FirewallAppIsEnable(IN LPCTSTR lpProcessFileName); // 添加应用程序允许通过防火墙; BOOL FirewallAddApp(IN LPCTSTR lpRuleAppPath, IN LPCTSTR lpRuleName); BOOL FirewallAddAppVista(IN LPCTSTR lpRuleAppPath, IN LPCTSTR lpRuleName, IN LPCTSTR lpRuleDescription = NULL, IN LPCTSTR lpRuleGroupName = NULL){ return FirewallAddApp(lpRuleAppPath, lpRuleName); } // 端口号是否允许通过防火墙; BOOL FirewallPortIsEnable(IN LONG lPortNumber, IN NET_FW_IP_PROTOCOL netProtocol); // 添加端口允许通过防火墙; BOOL FirewallAddPort(IN LONG lPortNumber, IN NET_FW_IP_PROTOCOL netProtocol, IN LPCTSTR lpName); BOOL FirewallAddPortVista(IN LPCTSTR lpRulePorts, IN LPCTSTR lpRuleInterfaceType, IN LPCTSTR lpRuleName, IN LPCTSTR lpRuleDescription = NULL, IN LPCTSTR lpRuleGroupName = NULL); // 获取最后的错误值; inline HRESULT HGetLastError() { return m_hr; } int FireWallTest() ; protected: INetFwProfile *fwProfile; private: HRESULT m_hlastresult; }; #if _MSC_VER >= 1600 // Vista以上操作系统; // 防火墙分三部分:domain profile(域)、private profile(私有)、public profile(公共); class WinFireWallVista:public WinFireWall { HRESULT m_hr; public: WinFireWallVista(); ~WinFireWallVista(); public: // 初始化防火墙; BOOL FirewallInit(); // 释放防火墙; void FirewallCleanup(); // 防火墙是否开启; BOOL FirewallIsOn(); // 开启防火墙; BOOL FirewallTurnOn(); // 关闭防火墙; BOOL FirewallTurnOff(); // 应用程序是否允许通过防火墙; BOOL FirewallAppIsEnable(IN LPCTSTR lpProcessFileName); // 添加应用程序允许通过防火墙; BOOL FirewallAddApp(IN LPCTSTR lpRuleAppPath, IN LPCTSTR lpRuleName); BOOL FirewallAddAppVista(IN LPCTSTR lpRuleAppPath, IN LPCTSTR lpRuleName, IN LPCTSTR lpRuleDescription = NULL, IN LPCTSTR lpRuleGroupName = NULL); // 端口号是否允许通过防火墙; BOOL FirewallPortIsEnable(IN LONG lPortNumber, IN NET_FW_IP_PROTOCOL netProtocol); // 添加端口允许通过防火墙; BOOL FirewallAddPort(IN LONG lPortNumber, IN NET_FW_IP_PROTOCOL netProtocol, IN LPCTSTR lpName); BOOL FirewallAddPortVista(IN LPCTSTR lpRulePorts, IN LPCTSTR lpRuleInterfaceType, IN LPCTSTR lpRuleName, IN LPCTSTR lpRuleDescription = NULL, IN LPCTSTR lpRuleGroupName = NULL); // 获取最后的错误值; inline HRESULT HGetLastError() { return m_hr; } int FireWallTest(); public: // 获取防火墙配置信息; BOOL Get_FirewallSettings_PerProfileType(NET_FW_PROFILE_TYPE2 ProfileTypePassed); // Show Firewall ON/OFF state on current profiles; HRESULT GetCurrentFirewallState(); // Show status of 'File and Printer Sharing' rule group on current profiles; HRESULT IsRuleGroupCurrentlyEnabled(); // Show status of 'File and Printer Sharing' rule group on specified profiles; HRESULT IsRuleGroupEnabled(); // For the current firewall profiles display whether the changes to firewall rules will take effect or not; HRESULT GetLocalPolicyModifyState(); // 枚举出所有rule,再判断是否添加过; void DumpFWRulesInCollection(INetFwRule* FwRule); void Enumerates(); private: INetFwPolicy2* pNetFwPolicy2; }; #endif // _MSC_VER >= 1500 #endif // __WINDOWS_FIREWALL__;