Код:
#include <Windows.h>
#include <netfw.h>
DWORD Win32FromHResult(HRESULT Result)
{
if ((Result & 0xFFFF0000) == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, 0))
return HRESULT_CODE(Result);
return (Result == S_OK ? ERROR_SUCCESS : ERROR_CAN_NOT_COMPLETE);
}
HRESULT CoNetfwInitialize2(INetFwPolicy2** Policy)
{
return CoCreateInstance(__uuidof(NetFwPolicy2), NULL, CLSCTX_INPROC_SERVER, __uuidof(INetFwPolicy2), (PVOID*)Policy);
}
HRESULT CoNetFwGetFirewallActivationStatus2(INetFwPolicy2* Policy, NET_FW_PROFILE_TYPE2 Type, PBOOL Status)
{
HRESULT Result = S_OK;
VARIANT_BOOL IsEnabled;
*Status = FALSE;
//https://docs.microsoft.com/en-us/windows/win32/api/icftypes/ne-icftypes-net_fw_profile_type2
if (!SUCCEEDED(Result = Policy->get_FirewallEnabled(Type , &IsEnabled)))
return Result;
if (IsEnabled == VARIANT_TRUE)
*Status = TRUE;
return Result;
}
HRESULT CoNetFwSetFirewallActivationStatus2(INetFwPolicy2* Policy, NET_FW_PROFILE_TYPE2 Type, PBOOL Status)
{
HRESULT Result = S_OK;
VARIANT_BOOL Bool;
*Status ? Bool = VARIANT_TRUE : Bool = VARIANT_FALSE;
Result = Policy->put_FirewallEnabled(Type, Bool);
Bool == VARIANT_TRUE ? *Status = TRUE : *Status = FALSE;
return Result;
}
INT main(VOID)
{
HRESULT Result = S_OK;
INetFwPolicy2* Policy = NULL;
DWORD dwError = ERROR_SUCCESS;
BOOL bActivationStatus = FALSE;
BOOL bFlag = FALSE;
if (!SUCCEEDED(Result = CoInitializeEx(0, COINIT_APARTMENTTHREADED)))
goto EXIT_ROUTINE;
if (!SUCCEEDED(Result = CoNetfwInitialize2(&Policy)))
goto EXIT_ROUTINE;
if (!SUCCEEDED(Result = CoNetFwGetFirewallActivationStatus2(Policy, NET_FW_PROFILE2_PRIVATE, &bActivationStatus)))
goto EXIT_ROUTINE;
if (!SUCCEEDED(Result = CoNetFwSetFirewallActivationStatus2(Policy, NET_FW_PROFILE2_PRIVATE, &bActivationStatus)))
goto EXIT_ROUTINE;
EXIT_ROUTINE:
if (!bFlag)
dwError = Win32FromHResult(Result);
if (Policy)
Policy->Release();
CoUninitialize();
return dwError;
}
Желаю всем продуктивной работы и приятного вечера