Rubrik: System/Windows | VB-Versionen: VB2005, VB2008 | 06.05.08 |
Firewall ein/ausschalten Das Beispiel prüft den aktuellen Zustand der Firewall und schaltet die Firewall entweder aus- oder ein. | ||
Autor: Heinz Prelle | Bewertung: | Views: 13.494 |
www.visual-basic5.de | System: WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Vor kurzem hatten wir Ihnen eine Klasse vorgestellt, mit der sich der Status der Windows-Firewall ermitteln lässt:
Firewall-Status unter WinXP/Vista prüfen
Heute erweitern wir den Code um die Möglichkeit die Firewall unter Windows XP / Vista gezielt ein- oder auszuschalten.
Erstellen Sie ein neues Windows-Forms Projekt und platzieren auf die Form einen Button (Button1). Fügen Sie nachfolgende Code in den Codeteil der Form ein:
Public Class Form1 ' Benötigte Variable zum Prüfen des Status der Windows Firewall Private FirewallState As Boolean
''' <summary> ''' Klasse zum Prüfen, Ein- und Ausschalten der Firewall ''' </summary> Public Class Firewall ''' <summary> ''' Prüfen ob das Betriebssystem unterstützt wird ''' </summary> Public Shared ReadOnly Property OS() As Boolean Get Return Firewall.IsWindowsXPOrHigher() End Get End Property ''' <summary> ''' Rückgabe des aktuellen Firewall Status ''' </summary> Public Shared ReadOnly Property ReturnFirewallState() As Boolean Get Return Firewall.IsFirewallEnabled() End Get End Property ''' <summary> ''' Rückgabe der Programm ID an die aufrufende Funktion ''' </summary> Private Shared ReadOnly Property ProgId() As String Get Return "HNetCfg.FwMgr" End Get End Property ''' <summary> ''' Prüfen ob die Firewall eingeschaltet ist oder nicht ''' </summary> ''' <returns>Status der Firewall</returns> Private Shared Function IsFirewallEnabled() As Boolean ' Variablen deklarieren... Dim hObject As Object Dim cp As Object Dim State As Boolean ' Fehlerüberwachung einschalten Try ' ... und initialisieren... hObject = CreateObject(ProgId) cp = hObject.LocalPolicy.CurrentProfile ' Rückgabe = True If cp.FirewallEnabled Then State = True Else ' ... sonst False State = False End If ' Resourcen freigeben. cp = Nothing hObject = Nothing ' Status zurückgeben Return State Catch ex As Exception ' Wenn Fehler False zurückgeben Return False End Try End Function ''' <summary> ''' Schaltet die Firewall ein / aus ''' </summary> Public Shared Sub DisableOrEnableFirewall(ByVal Index As String) ' Fehlerüberwachung einschalten Try Select Case Index Case "disable" ' Firewall ausschalten Dim CurrentProfile As Object = MakeObject() CurrentProfile.FirewallEnabled = False Case "enable" ' Firewall einschalten Dim CurrentProfile As Object = MakeObject() CurrentProfile.FirewallEnabled = True Case Else End Select Catch ex As Exception ' Eventuell auftretenden Fehler abfangen ' und Fehlermeldung ausgeben MessageBox.Show(ex.Message.ToString(), "Info") End Try End Sub ''' <summary> ''' Objektrückgabe ''' </summary> Private Shared Function MakeObject() As Object Dim hObject As Object = CreateObject(ProgId) Dim CurrentProfile As Object = hObject.LocalPolicy.CurrentProfile Return CurrentProfile End Function ''' <summary> ''' Prüft ob das verwendete Betriebssystem unterstützt wird ''' </summary> Private Shared Function IsWindowsXPOrHigher() As Boolean Dim OS As OperatingSystem = Environment.OSVersion Dim Result As Boolean = OS.Platform = PlatformID.Win32NT AndAlso _ ((OS.Version.Major = 5 AndAlso _ OS.Version.Minor >= 1) OrElse _ OS.Version.Major > 5) If Result Then Return True Else Return False End If End Function End Class
''' <summary> ''' Meldung über den aktuellen Status der Firewall zurückgeben ''' </summary> Private Function Message(ByVal Index As Integer) As String Dim msg As String = "" Select Case Index Case 0 msg = "Firewall ist eingeschaltet - Klicken zum ausschalten" Case 1 msg = "Firewall ist ausgeschaltet - Klicken zum einschalten" Case 2 msg = "Das Beispiel ist für Windows XP oder höher" End Select Return msg End Function
Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click ' Prüfen ob das Betriebssystem unterstützt wird If Firewall.OS Then ' Aktuellen Status der Firewall abfragen - Eingeschaltet oder nicht Me.FirewallState = Firewall.ReturnFirewallState() Select Case Me.FirewallState Case True ' Ist die Firewall eingeschaltet wird sie hier ausgeschaltet... Firewall.DisableOrEnableFirewall("disable") Case Else ' ... und hier wieder eingescahltet Firewall.DisableOrEnableFirewall("enable") End Select Else ' Wird das OS nicht unterstützt dann wird eine Meldung ausgegeben MessageBox.Show(Message(2), "Info") End If ' Den aktuellen Status der Variable FirewallState verwenden um die ' Button(-Beschriftungen) zu ändern. If Me.FirewallState = True Then Me.Button1.Text = Message(1) Else Me.Button1.Text = Message(0) End If End Sub
Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load ' Prüfen ob das Betriebssystem unterstützt wird If Firewall.OS Then ' Aktuellen Status der Firewall abfragen - Eingeschaltet oder nicht Me.FirewallState = Firewall.ReturnFirewallState() ' Status als Button-Beschriftung ausgeben Select Case Me.FirewallState Case True Me.Button1.Text = Message(0) Case Else Me.Button1.Text = Message(1) End Select Else ' Wird das OS nicht unterstützt dann wird eine Meldung ausgegeben MessageBox.Show(Message(2), "Info") Me.Button1.Enabled = False End If End Sub
End Class