簡體   English   中英

C#啟用/禁用Windows 7 / Windows 7嵌入式防火牆

[英]C# Enable/disable Windows 7 / Windows 7 Embedded Firewall

我正在開發一個項目,必須可以通過programm啟用/禁用Windows 7 Embedded系統的集成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:值不在預期范圍內。

現在有一個問題:為什么我會收到此錯誤,如何才能使其正常工作?

謝謝!

再次閱讀文檔之后,我遇到了“當您傳遞從CurrentProfileTypes屬性獲取的配置文件類型時,請確保只將一個配置文件類型傳遞給get_FirewallEnabled和put_FirewallEnabled。請注意,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));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM