Windows Firewall per Registry ändern

  • VB.NET
  • .NET (FX) 4.0

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von facebraker.

    Windows Firewall per Registry ändern

    Guten Morgen,

    ich habe ein kleines Problem, ich möchte mit einen kleinen VB.NET Programm die Windows Firewall ändern.
    Je nach Anwendungsfall die Ports öffnen oder schliessen.

    Ich habe es schon per Kommandozeile probiert, aber komischerweise funktioniert es bei mir aber an anderen Rechner nicht, so wie ich es recherchiert habe, ist es ein Bug von MS.

    VB.NET-Quellcode

    1. .WindowStyle = ProcessWindowStyle.Hidden
    2. .FileName = "cmd.exe"
    3. .Arguments = "/c netsh advfirewall firewall set rule name=""FTP OPEN""" + " new enable=" & fw_befehl


    Wie gesagt läuft es bei mir, da ändert er alle Regeln die den Namen tragen, aber bei anderen Rechnern kennt er den Shellbefehl nicht.

    Nun meine Idee das ganze in der Registry zu ändern:
    Unter den Schlüssel: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\FirewallRules

    Liegen ja die ganzen Regeln: z.B.

    Name: {01B27BA5-B123-443B-867B-207882B3BC09}
    Typ: REG_SZ
    Daten:v2.10|Action=Allow|Active=TRUE|Dir=In|Protocol=17|Profile=Public|App=C:\Program Files (x86)\TeamViewer\Version9\TeamViewer_Service.exe|Name=Teamviewer Remote Control Service|

    Meine Idee ist es alle Schlüssel die unter FirewallRules liegen einzulesen und dann wenn Name=FTP_OPEN ich ihn editiere.

    Schematisch gesprochen:

    for each rules in FirewallRules

    Ich habe aber bis her nur etwas gefunden, wenn ich die Schlüssel direkt anspreche, aber ich weiss ja nicht wie die Schlüssel heißen z.B. {01B27BA5-B123-443B-867B-207882B3BC09}
    sondern ich möchte alle auslesen und dann anhand des Namens filtern?

    Kann mir da jemand helfen?

    Danke!

    Gruß Alex


    Hallo, zur Ergänzung ich habe folgendes im Netz gefunden:

    VB.NET-Quellcode

    1. Dim MeinKey As RegistryKey
    2. Dim i As Integer
    3. MeinKey = Registry.LocalMachine.OpenSubKey("SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\FirewallRules")
    4. Dim ValueNames() As String
    5. ValueNames = MeinKey.GetValueNames()
    6. For i = LBound(ValueNames) To UBound(ValueNames) - 1
    7. Debug.WriteLine(ValueNames(i))
    8. Next
    9. End Sub


    So weit, so schick, er listet mir die Keys auf, aber wie komme ich an die Values im zweiten Schritt wie kann ich sie editieren?

    Danke schon einmal.

    Gruß Alex
    Hallo, ich konnte es folgendermaßen lösen:

    VB.NET-Quellcode

    1. Dim MeinKey As RegistryKey
    2. Dim VALkey As RegistryKey
    3. Dim ValueCont() As String
    4. Dim newkey As String
    5. Dim i As Integer
    6. MeinKey = Registry.LocalMachine.OpenSubKey("SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\FirewallRules")
    7. Dim ValueNames() As String
    8. ValueNames = MeinKey.GetValueNames()
    9. For i = LBound(ValueNames) To UBound(ValueNames) - 1
    10. 'Debug.WriteLine(ValueNames(i))
    11. VALkey = Registry.LocalMachine.OpenSubKey("SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\FirewallRules",True)
    12. ValueCont = VALkey.GetValue(ValueNames(i)).Split("|")
    13. For Each parm In ValueCont
    14. If parm = "Name=FTP OPEN" Then
    15. Debug.WriteLine(ValueNames(i))
    16. newkey = (VALkey.GetValue(ValueNames(i)))
    17. newkey = newkey.Replace("TRUE", "FALSE")
    18. VALkey.SetValue(ValueNames(i), newkey)
    19. End If
    20. Next
    21. Next


    Gruß Alex