VS15打开关闭win7防火墙

这是win7的操作方式
后期会发表xp的

// DlgFirewall.cpp : 实现文件
//

#include “stdafx.h”
#include “MyObject.h”
#include “DlgFirewall.h”
#include “afxdialogex.h”

#include <windows.h>
#include <stdio.h>
#include <netfw.h>

#pragma comment( lib, “ole32.lib” )

// Forward declarations
HRESULT WFCOMInitialize(INetFwPolicy2** ppNetFwPolicy2)
{
HRESULT hr = S_OK;

hr = CoCreateInstance(
	__uuidof(NetFwPolicy2),
	NULL,
	CLSCTX_INPROC_SERVER,
	__uuidof(INetFwPolicy2),
	(void**)ppNetFwPolicy2);

if (FAILED(hr))
{
	printf("CoCreateInstance for INetFwPolicy2 failed: 0x%08lx\n", hr);
	goto Cleanup;
}

Cleanup:
return hr;
}

// CDlgFirewall 对话框

IMPLEMENT_DYNAMIC(CDlgFirewall, CDialogEx)

CDlgFirewall::CDlgFirewall(CWnd* pParent / =NULL/)
CDialogEx(IDD_DLG_FIREWALL, pParent)
{

}

CDlgFirewall::~CDlgFirewall()
{
}

void CDlgFirewall::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CDlgFirewall, CDialogEx)
ON_BN_CLICKED(IDC_BUT_OPEN_FIREWALL, &CDlgFirewall::OnBnClickedButOpenFirewall)
ON_BN_CLICKED(IDC_BUT_FIREWALL, &CDlgFirewall::OnBnClickedButFirewall)
END_MESSAGE_MAP()

// CDlgFirewall 消息处理程序

void CDlgFirewall::OnBnClickedButOpenFirewall()
{
HRESULT hrComInit = S_OK;
HRESULT hr = S_OK;

INetFwPolicy2 *pNetFwPolicy2 = NULL;

// Initialize COM.
hrComInit = CoInitializeEx(
	0,
	COINIT_APARTMENTTHREADED
);

// Ignore RPC_E_CHANGED_MODE; this just means that COM has already been
// initialized with a different mode. Since we don't care what the mode is,
// we'll just use the existing mode.
if (hrComInit != RPC_E_CHANGED_MODE)
{
	if (FAILED(hrComInit))
	{
		printf("CoInitializeEx failed: 0x%08lx\n", hrComInit);
		goto Cleanup;
	}
}

// Retrieve INetFwPolicy2
hr = WFCOMInitialize(&pNetFwPolicy2);
if (FAILED(hr))
{
	goto Cleanup;
}

// Disable Windows Firewall for the Domain profile
//控制三种防火墙
hr = pNetFwPolicy2->put_FirewallEnabled(NET_FW_PROFILE2_DOMAIN, TRUE);
if (FAILED(hr))
{
	printf("put_FirewallEnabled failed for Domain: 0x%08lx\n", hr);
	goto Cleanup;
}

// Disable Windows Firewall for the Private profile
hr = pNetFwPolicy2->put_FirewallEnabled(NET_FW_PROFILE2_PRIVATE, TRUE);
if (FAILED(hr))
{
	printf("put_FirewallEnabled failed for Private: 0x%08lx\n", hr);
	goto Cleanup;
}

// Disable Windows Firewall for the Public profile
hr = pNetFwPolicy2->put_FirewallEnabled(NET_FW_PROFILE2_PUBLIC, TRUE);
if (FAILED(hr))
{
	printf("put_FirewallEnabled failed for Public: 0x%08lx\n", hr);
	goto Cleanup;
}

Cleanup:

// Release INetFwPolicy2
if (pNetFwPolicy2 != NULL)
{
	pNetFwPolicy2->Release();
}

// Uninitialize COM.
if (SUCCEEDED(hrComInit))
{
	CoUninitialize();
}

}

void CDlgFirewall::OnBnClickedButCloseFirewall()
{
HRESULT hrComInit = S_OK;
HRESULT hr = S_OK;

INetFwPolicy2 *pNetFwPolicy2 = NULL;

// Initialize COM.
hrComInit = CoInitializeEx(
	0,
	COINIT_APARTMENTTHREADED
);

// Ignore RPC_E_CHANGED_MODE; this just means that COM has already been
// initialized with a different mode. Since we don't care what the mode is,
// we'll just use the existing mode.
if (hrComInit != RPC_E_CHANGED_MODE)
{
	if (FAILED(hrComInit))
	{
		printf("CoInitializeEx failed: 0x%08lx\n", hrComInit);
		goto Cleanup;
	}
}

// Retrieve INetFwPolicy2
hr = WFCOMInitialize(&pNetFwPolicy2);
if (FAILED(hr))
{
	goto Cleanup;
}

// Disable Windows Firewall for the Domain profile
hr = pNetFwPolicy2->put_FirewallEnabled(NET_FW_PROFILE2_DOMAIN, FALSE);
if (FAILED(hr))
{
	printf("put_FirewallEnabled failed for Domain: 0x%08lx\n", hr);
	goto Cleanup;
}

// Disable Windows Firewall for the Private profile
hr = pNetFwPolicy2->put_FirewallEnabled(NET_FW_PROFILE2_PRIVATE, FALSE);
if (FAILED(hr))
{
	printf("put_FirewallEnabled failed for Private: 0x%08lx\n", hr);
	goto Cleanup;
}

// Disable Windows Firewall for the Public profile
hr = pNetFwPolicy2->put_FirewallEnabled(NET_FW_PROFILE2_PUBLIC, FALSE);
if (FAILED(hr))
{
	printf("put_FirewallEnabled failed for Public: 0x%08lx\n", hr);
	goto Cleanup;
}

Cleanup:

// Release INetFwPolicy2
if (pNetFwPolicy2 != NULL)
{
	pNetFwPolicy2->Release();
}

// Uninitialize COM.
if (SUCCEEDED(hrComInit))
{
	CoUninitialize();
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值