#Include $oNet = __Firewall_Init() __Firewall_Enable() MsgBox(0, '', 'Firewall: ' & __Firewall_GetState($oNet)) __Firewall_Disable() MsgBox(0, '', 'Firewall: ' & __Firewall_GetState($oNet)) $aApp = __Firewall_GetAllApplications($oNet) _ArrayDisplay($aApp) Func __Firewall_Init() Local $oFirewall = ObjCreate('HNetCfg.FwMgr') If (Not IsObj($oFirewall)) Then Return SetError(@error, @extended, 0) EndIf Return $oFirewall EndFunc Func __Firewall_OpenPort(ByRef $oFirewall, $sName, $iPort, $iFlag = True) Local $iRet, $oPort = ObjCreate('HNetCfg.FwOpenPort') If IsObj($oPort) And ($sName <> '') And (StringLen($iPort) <= 4) Then $oPort.Port = $iPort $oPort.Name = $sName $oPort.Enabled = $iFlag $iRet = $oFirewall.LocalPolicy.CurrentProfile.GloballyOpenPorts.Add($oPort) If ($iRet = 0) Then Return 1 EndIf EndIf Return 0 EndFunc Func __Firewall_AuthApp(ByRef $oFirewall, $sName, $sApplications, $iIPVersion = 2, $sRemoteAddress = '*', $iScope = 0) Local $iRet, $oApp = ObjCreate('HNetCfg.FwAuthorizedApplication') If IsObj($oApp) Then If ($sName <> '') And ($sApplications <> '') Then With $oApp .Name = $sName .IPVersion = $iIPVersion .ProcessImageFileName = $sApplications .RemoteAddresses = $sRemoteAddress .Scope = $iScope .Enabled = True EndWith $iRet = $oFirewall.LocalPolicy.GetProfileByType(1).AuthorizedApplications.Add($oApp) If ($iRet = 0) Then Return 1 EndIf EndIf EndIf Return 0 EndFunc Func __Firewall_RemoveApp(ByRef $oFirewall, $sApplications) Local $iRet If (IsObj($oFirewall) And ($sApplications <> '')) Then $iRet = $oFirewall.LocalPolicy.CurrentProfile.AuthorizedApplications.Remove($sApplications) If ($iRet = 0) Then Return 1 EndIf EndIf Return 0 EndFunc Func __Firewall_Enable() Local $sRead If @OSArch = 'X86' Then $iPid = Run(@ComSpec & ' /C netsh firewall set opmode ENABLE', @SystemDir, @SW_HIDE, 2) Else $iPid = Run(@ComSpec & ' /C netsh advfirewall set allprofiles state on', @SystemDir, @SW_HIDE, 2) EndIf Do $sRead &= StdoutRead($iPid) Until $sRead <> '' EndFunc Func __Firewall_Disable() Local $sRead If @OSArch = 'X86' Then $iPid = Run(@ComSpec & ' /C netsh firewall set opmode DISABLE', @SystemDir, @SW_HIDE, 2) Else $iPid = Run(@ComSpec & ' /C netsh advfirewall set allprofiles state off', @SystemDir, @SW_HIDE, 2) EndIf Do $sRead &= StdoutRead($iPid) Until $sRead <> '' EndFunc Func __Firewall_RemovePort(ByRef $oFirewall, $iPort) Local $iRet If IsObj($oFirewall) And (StringLen($iPort) <= 4) Then $iRet = $oFirewall.LocalPolicy.CurrentProfile.GloballyOpenPorts.Remove($iPort, 6) If ($iRet = 0) Then Return 1 EndIf EndIf Return 0 EndFunc Func __Firewall_GetState(ByRef $oFirewall) If IsObj($oFirewall) Then Return $oFirewall.LocalPolicy.CurrentProfile.FirewallEnabled EndIf Return -1 EndFunc Func __Firewall_GetAllApplications(ByRef $oFirewall) Local $iRet[1][3] = [[0, 0, 0]] $oProfile = $oFirewall.LocalPolicy.CurrentProfile For $oApp In $oProfile.AuthorizedApplications $iRet[0][0] += 1 ReDim $iRet[$iRet[0][0] + 1][UBound($iRet, 2)] $iRet[$iRet[0][0]][0] = $oApp.ProcessImageFileName $iRet[$iRet[0][0]][1] = $oApp.IpVersion $iRet[$iRet[0][0]][2] = $oApp.Scope Next Return $iRet EndFunc Func __Firewall_SetICMPSettings(ByRef $oFirewall, $Echo, $Mask, $Router, $Timestamp, $Destination, $Packet, $Param, $Source, $Time, $Redirect) $oICMPSettings = $oFirewall.LocalPolicy.CurrentProfile.ICMPSettings $oICMPSettings.AllowInboundEchoRequest = $Echo $oICMPSettings.AllowInboundMaskRequest = $Mask $oICMPSettings.AllowInboundRouterRequest = $Router $oICMPSettings.AllowInboundTimestampRequest = $Timestamp $oICMPSettings.AllowOutboundDestinationUnreachable = $Destination $oICMPSettings.AllowOutboundPacketTooBig = $Packet $oICMPSettings.AllowOutboundParameterProblem = $Param $oICMPSettings.AllowOutboundSourceQuench = $Source $oICMPSettings.AllowOutboundTimeExceeded = $Time $oICMPSettings.AllowRedirect = $Redirect EndFunc Func __Firewall_GetICMPSettings(ByRef $oFirewall) Local $Allow[10] $oICMPSettings = $oFirewall.LocalPolicy.CurrentProfile.ICMPSettings $Allow[0] = $oICMPSettings.AllowInboundEchoRequest ; запрос входящего эха $Allow[1] = $oICMPSettings.AllowInboundMaskRequest ; запрос входящей маски $Allow[2] = $oICMPSettings.AllowInboundRouterRequest ; запрос входящего маршрутизатора $Allow[3] = $oICMPSettings.AllowInboundTimestampRequest ; запрос входящего штампа времени $Allow[4] = $oICMPSettings.AllowOutboundDestinationUnreachable ; Сосотояние исходящих назначений $Allow[5] = $oICMPSettings.AllowOutboundPacketTooBig ; исходящий пакет слишком большой $Allow[6] = $oICMPSettings.AllowOutboundParameterProblem ; Проблема исходящего параметра $Allow[7] = $oICMPSettings.AllowOutboundSourceQuench ; снижение скорости источника $Allow[8] = $oICMPSettings.AllowOutboundTimeExceeded ; превышение лимита исходящего времени $Allow[9] = $oICMPSettings.AllowRedirect ; Разрешать перенаправление Return $Allow EndFunc