После прочтения некоторых ваших комментариев в ответ на другие ответы, я думаю, что это на самом деле может быть ближе к тому, что вы ищете. Он может не перехватывать все типы брандмауэров, но любой крупный поставщик брандмауэров должен быть зарегистрирован в Центре безопасности и, следовательно, обнаружен этим методом. Вы также можете объединить это с некоторыми другими ответами, чтобы получить второй уровень проверки.
Это сообщение эксперта по обмену, поэтому вы не сможете прочитать ветку. На всякий случай я скопировал и вставил соответствующую информацию. Он написан на VBScript, но он должен указывать вам правильное направление в отношении того, какие пространства имен WMI вы можете использовать.
KemalRouge : Я только что решил эту проблему с некоторой помощью
коллега. Он указал мне в направлении статьи базы знаний,
который указал, что эта информация была сохранена в базе данных WMI
По сути, можно запросить WMI в несколько строк кода, чтобы
выяснить, какие брандмауэры / антивирусные программы контролируются
Центр безопасности и состояние этого программного обеспечения (т.е. включено или нет).
В любом случае, если вам интересно, вот код VB, который я использовал, чтобы проверить это
(вам потребуется ссылка на «Библиотеку Microsoft WMI Scripting V1.2»):
Private Sub DumpFirewallInfo()
Dim oLocator As WbemScripting.SWbemLocator
Dim oService As WbemScripting.SWbemServicesEx
Dim oFirewalls As WbemScripting.SWbemObjectSet
Dim oFirewall As WbemScripting.SWbemObjectEx
Dim oFwMgr As Variant
Set oFwMgr = CreateObject("HNetCfg.FwMgr")
Debug.Print "Checking the Windows Firewall..."
Debug.Print "Windows Firewal Enabled: " & oFwMgr.LocalPolicy.CurrentProfile.FirewallEnabled
Debug.Print ""
Set oFwMgr = Nothing
Debug.Print "Checking for other installed firewalls..."
Set oLocator = New WbemScripting.SWbemLocator
Set oService = oLocator.ConnectServer(".", "root\SecurityCenter")
oService.Security_.ImpersonationLevel = 3
Set oFirewalls = oService.ExecQuery("SELECT * FROM FirewallProduct") ' This could also be "AntivirusProduct"
For Each oFirewall In oFirewalls
Debug.Print "Company: " & vbTab & oFirewall.CompanyName
Debug.Print "Firewall Name: " & vbTab & oFirewall.DisplayName
Debug.Print "Enabled: " & vbTab & Format$(oFirewall.Enabled)
Debug.Print "Version: " & vbTab & oFirewall.versionNumber
Debug.Print ""
Next oFirewall
Set oFirewall = Nothing
Set oFirewalls = Nothing
Set oService = Nothing
Set oLocator = Nothing
End Sub