vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: System/Windows   |   VB-Versionen: VB2005, VB200806.05.08
Firewall ein/ausschalten

Das Beispiel prüft den aktuellen Zustand der Firewall und schaltet die Firewall entweder aus- oder ein.

Autor:   Heinz PrelleBewertung:  Views:  13.493 
www.visual-basic5.deSystem:  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



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.