首页 > 系统相关 >Windows中通过C++添加防火墙规则

Windows中通过C++添加防火墙规则

时间:2023-08-22 18:11:31浏览次数:33  
标签:Windows pFwRule 防火墙 C++ hr 规则 put pFwRules

#include <iostream>
#include <Windows.h>
#include <netfw.h>

int main() {
	HRESULT hr = CoInitializeEx(0, COINIT_APARTMENTTHREADED);// 初始化 COM
	if (SUCCEEDED(hr)) {
		INetFwPolicy2* pFwPolicy2 = NULL;
		//创建防火墙策略
		hr = CoCreateInstance(__uuidof(NetFwPolicy2), NULL, CLSCTX_INPROC_SERVER, __uuidof(INetFwPolicy2), (void**)&pFwPolicy2);
		if (SUCCEEDED(hr)) {
			INetFwRules* pFwRules = NULL;
			//获取防火墙规则
			hr = pFwPolicy2->get_Rules(&pFwRules);
			if (SUCCEEDED(hr)) {            
				INetFwRule* pFwRule = NULL;
                // 在这里你可以通过遍历 pFwRules 获取并修改你想要的规则
               // 例如,假设我们要修改名为 "MyFirewallRule" 的规则
                BSTR ruleName = SysAllocString(L"MyFirewallRule");
                //从规则集合中获取指定名称的规则
                hr = pFwRules->Item(ruleName, &pFwRule);
                if (SUCCEEDED(hr)) {
                    std::cout << "Firewall rule is exist" << std::endl;
                    pFwRules->Remove(ruleName);//删除名为""MyFirewallRule"的防火墙
                    SysFreeString(ruleName);
                    pFwRules->Release();
                    pFwPolicy2->Release();
CoUninitialize();//反初始化COM return -1; } //创建一个新的防火墙规则 hr = CoCreateInstance(__uuidof(NetFwRule), NULL, CLSCTX_INPROC_SERVER, __uuidof(INetFwRule),(void**)&pFwRule); if (SUCCEEDED(hr)) { // 设置规则的属性 pFwRule->put_Name(ruleName); pFwRule->put_Description(SysAllocString(L"My Firewall Rule")); pFwRule->put_Action(NET_FW_ACTION_ALLOW); // 允许连接 pFwRule->put_Direction(NET_FW_RULE_DIR_IN); // 入站规则 pFwRule->put_Enabled(VARIANT_TRUE); // 启用规则 pFwRule->put_Protocol(NET_FW_IP_PROTOCOL_TCP); // TCP 协议 pFwRule->put_LocalPorts(SysAllocString(L"83")); // 本地端口 83 pFwRule->put_InterfaceTypes(SysAllocString(L"All")); // 适用于所有网络接口 // 将规则添加到规则集合中 hr = pFwRules->Add(pFwRule); if (SUCCEEDED(hr)) { std::cout << "Firewall rule added successfully." << std::endl; } else { std::cout << "Failed to add firewall rule: " << hr << std::endl; } pFwRule->Release(); } SysFreeString(ruleName); pFwRules->Release(); } pFwPolicy2->Release(); } CoUninitialize();//反初始化COM } return 0; }

创建防火墙之前:

 创建防火墙之后:

 

标签:Windows,pFwRule,防火墙,C++,hr,规则,put,pFwRules
From: https://www.cnblogs.com/TechNomad/p/17649345.html

相关文章

  • C++11 lambda函数
    在数理逻辑或计算机科学领域中lambda是被用来表示一种匿名函数,这种匿名函数代表了一种所谓的λ演算(lambdacalculus)。intmain(){intgirls=3,boys=4;autototalChild=[](intx,inty)->int{returnx+y;};returntotalChild(girls,boys);}该函数接受两个参数......
  • windows 安装mysql
    首先去下载Mysql文件我下载的是zip版本的 2.解压文件3.在解压的文件主目录下创建一个my.ini文件#Foradviceonhowtochangesettingspleasesee#http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html#***DONOTEDITTHISFILE.It'sa......
  • windows 桌面GUI自动化-6. pywinauto 操作弹出新窗口上按钮
    前言pywinauto操作弹出新窗口上的按钮操作新窗口frompywinautoimportApplicationapp=Application('uia').start("notepad.exe")win=app.window(title_re="无标题-记事本")#操作级联菜单win.menu_select('帮助(H)->关于记事本(A)')点关于后弹出新窗口,现在......
  • C++ 面向对象开发2
    staticstatic函数没有thispointer,static数据只有一份,static函数只能处理static数据。static数据在class外需要提供定义。单例设计classA{public:staticA&getInstance();setup(){...}private:A();;A(constA&rhs);...};A&A::getInst......
  • C++ 面向对象开发1
    ObjectBased:面对的是单一class的设计;ObjectOriented:面对的是多重classes的设计,classes和classes之间的关系。class前向声明,声明,定义。函数若在classbody中定义完成,便自动成为inline函数。如果函数太复杂就不会成为inline。overload的函数编译之后签名不同。虽然参数列表不......
  • 【转载】Macbook M1/M2如何调试c++代码?使用lldb即可
    转载自:https://www.zybuluo.com/qidiandasheng/note/349994#:~:text=GDB%3A,C%2B%2B或者Python插件。MacbookM1/M2无法安装gdb,但是可以使用lldb进行代码调试。使用方法和介绍如下:......
  • C++ 函数模版 不定参数
    实现参数不固定的加法,需要如下实现template<typenameT>TtempSum(constT&t){ staticTsum; sum+=t; returnsum;}//这里保存计算结果template<typenameT>TsaveValue(constT&t){ staticTtemp=t;//这里必须用static的功能 returntemp;}voidt......
  • 多态性 - C++中实现运行时多态的方式
    一、概述C++中的多态性是指同一个函数可以有多种不同的实现方式,并且在运行时根据实际情况进行选择执行。在C++中实现多态有两种方式:静态多态和动态多态。静态多态是指在编译时确定函数的实现,包括函数重载和模板函数;动态多态是指在运行时根据对象的实际类型来确定函数的实现,包括虚......
  • paddleocr在华为升腾920上编译C++ cpu版的推理
    最好用这个提供的docker环境华为昇腾NPU-PaddlePaddle深度学习平台编译推理库飞腾/鲲鹏下从源码编译—Paddle-Inferencedocumentation(paddlepaddle.org.cn)编译成功后还需要报错 Noruletomaketarget'/root/workspace/Paddle/build/paddle_inference_install_dir......
  • 4.8 C++ Boost 应用JSON解析库
    property_tree是Boost库中的一个头文件库,用于处理和解析基于XML、Json或者INFO格式的数据。property_tree可以提供一个轻量级的、灵活的、基于二叉数的通用容器,可以处理包括简单值(如int、float)和复杂数据结构(如结构体和嵌套容器)在内的各种数据类型。它可以解析数据文件到......