C#启用/禁用Windows 7/Windows 7嵌入式防火墙

本文关键字:Windows 防火墙 嵌入式 禁用 启用 | 更新日期: 2023-09-27 17:58:01

我正在进行一个项目,在该项目中,必须可以通过程序启用/禁用Windows 7嵌入式系统的集成Windows防火墙。

使用代码:

private static INetFwPolicy2 getCurrPolicy()
    {
        INetFwPolicy2 fwPolicy2;
        Type tNetFwPolicy2 = Type.GetTypeFromProgID("HNetCfg.FwPolicy2");
        if (tNetFwPolicy2 != null)
            fwPolicy2 = (INetFwPolicy2)Activator.CreateInstance(tNetFwPolicy2);
        else
            return null;
        return fwPolicy2;
    }
    public static bool GetFirewallStatus()
    {
        bool result = false;
        try
        {
            INetFwPolicy2 fwPolicy2 = getCurrPolicy();
            NET_FW_PROFILE_TYPE2_ fwCurrentProfileTypes;
            //read Current Profile Types (only to increase Performace)
            //avoids access on CurrentProfileTypes from each Property
            fwCurrentProfileTypes = NET_FW_PROFILE_TYPE2_)fwPolicy2.CurrentProfileTypes;
            result = (fwPolicy2.get_FirewallEnabled(fwCurrentProfileTypes));
        }
        catch (Exception e)
        {
            Console.WriteLine(e.ToString());
        }
        return result;
    }
    public static void SetFirewallStatus(bool newStatus)
    {
        try
        {
            NET_FW_PROFILE_TYPE2_ fwCurrentProfileTypes;
            INetFwPolicy2 currPolicy = getCurrPolicy();
            //read Current Profile Types (only to increase Performace)
            //avoids access on CurrentProfileTypes from each Property
            fwCurrentProfileTypes = NET_FW_PROFILE_TYPE2_)currPolicy.CurrentProfileTypes;
            currPolicy.set_FirewallEnabled(fwCurrentProfileTypes, newStatus);
        }
        catch (Exception e)
        {
            Console.WriteLine(e.ToString());
        }
    }

发生的情况是,在currPolicy对象的每次函数调用中,我都会得到以下消息:

System.ArgumentException:值不在预期范围内。

现在我的问题是:为什么我会出现这个错误,我该如何让它发挥作用?

谢谢!

C#启用/禁用Windows 7/Windows 7嵌入式防火墙

再次阅读文档后,我发现当您传递从CurrentProfileTypes属性获得的配置文件类型时,请确保只将一个配置文件类型传递给get_FirewallEnabled和put_FirewallEnable。请注意,get_CurrentProfileTypes可以返回多个配置文件。

(http://msdn.microsoft.com/en-us/library/windows/desktop/aa365316%28v=vs.85%29.aspx)

是的,我实际上已经返回了不止一个配置文件类型。因此,当您只将一个概要文件传递给FirewallEnabled的get和set方法时,API就会工作。例如:

result = (fwPolicy2.get_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PUBLIC));