WindowsFirewall.h 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. #ifndef __WINDOWS_FIREWALL__
  2. #define __WINDOWS_FIREWALL__
  3. /************************************************************************/
  4. /* Copyright (C), 2016-2020, [Jeff], 保留所有权利;
  5. /* 模 块 名:防火墙模块;
  6. /* 描 述:;
  7. /*
  8. /* 版 本:[V];
  9. /* 作 者:[Jeff];
  10. /* 日 期:[5/8/2017];
  11. /*
  12. /*
  13. /* 注 意:该模块函数,只适用于Windos Vista以下系统;
  14. /*
  15. /* 修改记录:[Jeff];
  16. /* 修改日期:;
  17. /* 修改版本:;
  18. /* 修改内容:;
  19. /************************************************************************/
  20. #include <netfw.h>
  21. class WinFireWall
  22. {
  23. public:
  24. // 初始化防火墙;
  25. virtual BOOL FirewallInit() = 0;
  26. // 释放防火墙;
  27. virtual void FirewallCleanup() = 0;
  28. // 防火墙是否开启;
  29. virtual BOOL FirewallIsOn() = 0;
  30. // 开启防火墙;
  31. virtual BOOL FirewallTurnOn() = 0;
  32. // 关闭防火墙;
  33. virtual BOOL FirewallTurnOff() = 0;
  34. // 应用程序是否允许通过防火墙;
  35. virtual BOOL FirewallAppIsEnable(IN LPCTSTR lpProcessFileName) = 0;
  36. // 添加应用程序允许通过防火墙;
  37. virtual BOOL FirewallAddApp(IN LPCTSTR lpRuleAppPath, IN LPCTSTR lpRuleName) = 0;
  38. virtual BOOL FirewallAddAppVista(IN LPCTSTR lpRuleAppPath, IN LPCTSTR lpRuleName, IN LPCTSTR lpRuleDescription = NULL, IN LPCTSTR lpRuleGroupName = NULL) = 0;
  39. // 端口号是否允许通过防火墙;
  40. virtual BOOL FirewallPortIsEnable(IN LONG lPortNumber, IN NET_FW_IP_PROTOCOL netProtocol) = 0;
  41. // 添加端口允许通过防火墙;
  42. virtual BOOL FirewallAddPort(IN LONG lPortNumber, IN NET_FW_IP_PROTOCOL netProtocol, IN LPCTSTR lpName) = 0;
  43. virtual BOOL FirewallAddPortVista(IN LPCTSTR lpRulePorts, IN LPCTSTR lpRuleInterfaceType, IN LPCTSTR lpRuleName, IN LPCTSTR lpRuleDescription = NULL, IN LPCTSTR lpRuleGroupName = NULL) = 0;
  44. // 获取最后的错误值;
  45. virtual HRESULT HGetLastError() = 0;
  46. };
  47. // Vistar以下操作系统;
  48. class WinFireWallXP:public WinFireWall
  49. {
  50. HRESULT m_hr;
  51. public:
  52. WinFireWallXP();
  53. ~WinFireWallXP();
  54. public:
  55. // 初始化防火墙;
  56. BOOL FirewallInit();
  57. // 释放防火墙;
  58. void FirewallCleanup();
  59. // 防火墙是否开启;
  60. BOOL FirewallIsOn();
  61. // 开启防火墙;
  62. BOOL FirewallTurnOn();
  63. // 关闭防火墙;
  64. BOOL FirewallTurnOff();
  65. // 应用程序是否允许通过防火墙;
  66. BOOL FirewallAppIsEnable(IN LPCTSTR lpProcessFileName);
  67. // 添加应用程序允许通过防火墙;
  68. BOOL FirewallAddApp(IN LPCTSTR lpRuleAppPath, IN LPCTSTR lpRuleName);
  69. BOOL FirewallAddAppVista(IN LPCTSTR lpRuleAppPath, IN LPCTSTR lpRuleName, IN LPCTSTR lpRuleDescription = NULL, IN LPCTSTR lpRuleGroupName = NULL){
  70. return FirewallAddApp(lpRuleAppPath, lpRuleName);
  71. }
  72. // 端口号是否允许通过防火墙;
  73. BOOL FirewallPortIsEnable(IN LONG lPortNumber, IN NET_FW_IP_PROTOCOL netProtocol);
  74. // 添加端口允许通过防火墙;
  75. BOOL FirewallAddPort(IN LONG lPortNumber, IN NET_FW_IP_PROTOCOL netProtocol, IN LPCTSTR lpName);
  76. BOOL FirewallAddPortVista(IN LPCTSTR lpRulePorts, IN LPCTSTR lpRuleInterfaceType, IN LPCTSTR lpRuleName, IN LPCTSTR lpRuleDescription = NULL, IN LPCTSTR lpRuleGroupName = NULL);
  77. // 获取最后的错误值;
  78. inline HRESULT HGetLastError() { return m_hr; }
  79. int FireWallTest() ;
  80. protected:
  81. INetFwProfile *fwProfile;
  82. private:
  83. HRESULT m_hlastresult;
  84. };
  85. #if _MSC_VER >= 1600
  86. // Vista以上操作系统;
  87. // 防火墙分三部分:domain profile(域)、private profile(私有)、public profile(公共);
  88. class WinFireWallVista:public WinFireWall
  89. {
  90. HRESULT m_hr;
  91. public:
  92. WinFireWallVista();
  93. ~WinFireWallVista();
  94. public:
  95. // 初始化防火墙;
  96. BOOL FirewallInit();
  97. // 释放防火墙;
  98. void FirewallCleanup();
  99. // 防火墙是否开启;
  100. BOOL FirewallIsOn();
  101. // 开启防火墙;
  102. BOOL FirewallTurnOn();
  103. // 关闭防火墙;
  104. BOOL FirewallTurnOff();
  105. // 应用程序是否允许通过防火墙;
  106. BOOL FirewallAppIsEnable(IN LPCTSTR lpProcessFileName);
  107. // 添加应用程序允许通过防火墙;
  108. BOOL FirewallAddApp(IN LPCTSTR lpRuleAppPath, IN LPCTSTR lpRuleName);
  109. BOOL FirewallAddAppVista(IN LPCTSTR lpRuleAppPath, IN LPCTSTR lpRuleName, IN LPCTSTR lpRuleDescription = NULL, IN LPCTSTR lpRuleGroupName = NULL);
  110. // 端口号是否允许通过防火墙;
  111. BOOL FirewallPortIsEnable(IN LONG lPortNumber, IN NET_FW_IP_PROTOCOL netProtocol);
  112. // 添加端口允许通过防火墙;
  113. BOOL FirewallAddPort(IN LONG lPortNumber, IN NET_FW_IP_PROTOCOL netProtocol, IN LPCTSTR lpName);
  114. BOOL FirewallAddPortVista(IN LPCTSTR lpRulePorts, IN LPCTSTR lpRuleInterfaceType, IN LPCTSTR lpRuleName, IN LPCTSTR lpRuleDescription = NULL, IN LPCTSTR lpRuleGroupName = NULL);
  115. // 获取最后的错误值;
  116. inline HRESULT HGetLastError() { return m_hr; }
  117. int FireWallTest();
  118. public:
  119. // 获取防火墙配置信息;
  120. BOOL Get_FirewallSettings_PerProfileType(NET_FW_PROFILE_TYPE2 ProfileTypePassed);
  121. // Show Firewall ON/OFF state on current profiles;
  122. HRESULT GetCurrentFirewallState();
  123. // Show status of 'File and Printer Sharing' rule group on current profiles;
  124. HRESULT IsRuleGroupCurrentlyEnabled();
  125. // Show status of 'File and Printer Sharing' rule group on specified profiles;
  126. HRESULT IsRuleGroupEnabled();
  127. // For the current firewall profiles display whether the changes to firewall rules will take effect or not;
  128. HRESULT GetLocalPolicyModifyState();
  129. // 枚举出所有rule,再判断是否添加过;
  130. void DumpFWRulesInCollection(INetFwRule* FwRule);
  131. void Enumerates();
  132. private:
  133. INetFwPolicy2* pNetFwPolicy2;
  134. };
  135. #endif // _MSC_VER >= 1500
  136. #endif // __WINDOWS_FIREWALL__;