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

Как добавлять/удалять правила в брандмауэре 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.

Связанный контент