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

Мне нужно реализовать инструмент, который добавляет и удаляет правила в брандмауэре 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? Есть ли другие варианты или преимущества / недостатки вариантов, которые я перечислил?

1 ответ

Решение

Для Windows 7 способ сделать это другой

Все, что связано с брандмауэром в Server 2008/Vista / Server R2/ Windows 7, управляется через COM-объект HNetCfg.FwPolicy2.

отсюда

Если вы хотите использовать PowerShell, но вам нужно ориентироваться на обе версии ОС, я бы сказал, что написание двух функций будет наиболее простым, поскольку вы, похоже, уже знаете, как это сделать для Windows 8.

Другие вопросы по тегам