Как добавить / удалить правила в брандмауэре Windows

1644
Serge Rogatch

Мне нужно реализовать инструмент, который добавляет и удаляет правила в брандмауэре Windows. Правила могут быть входящими или исходящими, запрещающими обмен данными по указанным протоколам, IP-адресам и портам. У меня возникли проблемы с принятием проектного решения о том, какой из следующих вариантов мне известно:

  1. PowerShell, как описано, например, в https://technet.microsoft.com/en-us/library/jj554906(v=wps.630).aspx . Проблема с этим параметром заключается в том, что (поправьте меня, если я ошибаюсь) кажется, что он не поддерживается в Windows 7, в то время как мой инструмент должен работать в Windows 7, Windows 8 (.1) и желательно в более поздних версиях Windows. Кроме того, мне не разрешается использовать C #, в то время как PowerShell не интегрируется с C ++, за исключением (возможно, я не уверен) посредством вызова процесса PowerShell, предоставления ему параметров командной строки и чтения / записи из / в его вывод / ввод потоки.
  2. "netsh advfirewall firewall". Проблема с этой опцией заключается в том, что Windows 8.1 говорит, что контекст «netsh advfirewall» устарел и может быть удален из более поздних версий Windows. Поэтому я боюсь, что этот путь сделает мой инструмент не работающим на Windows 9 или 10.
  3. COM-интерфейсы брандмауэра Windows, как в этих примерах https://msdn.microsoft.com/en-us/library/windows/desktop/dd339604(v=vs.85).aspx . Требуемое кодирование C ++ не является проблемой, хотя это может занять больше времени, чем использование PowerShell или командной строки (netsh advfirewall firewall).

Какой вариант будет лучшим решением для добавления / удаления правил брандмауэра Windows? Есть ли другие варианты или преимущества / недостатки вариантов, которые я перечислил?

0
Просто опрос мнения не по теме. Мы не можем помочь вам решить. Не стесняйтесь задавать вопросы о конкретной проблеме реализации, либо здесь, либо, скорее всего, в StackOverflow (к которому относятся вопросы, связанные с программированием). Karan 8 лет назад 0
Конкретная проблема реализации заключается в том, «как добавить / удалить правила в брандмауэре Windows» (как следует из заголовка вопроса), чтобы реализация работала для всех версий Windows, начиная с Windows 7. Параметры командной строки, такие как PowerShell и «netsh advfirewall» межсетевой экран ", кажется, больше относится к этому (системное администрирование), в то время как опция COM принадлежит StackOverflow. Serge Rogatch 8 лет назад 0

1 ответ на вопрос

1
Julian Knight

For Windows 7, the way to do it is different

Everything firewall-related in Server 2008/Vista / Server R2/ Windows 7, is managed through the HNetCfg.FwPolicy2 COM object

from here

If you want to use PowerShell but need to target both versions of the OS, I would say that writing 2 functions would be simplest since you already seem to know how to do it for Windows 8.