1

プログラムで 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: 値が期待される範囲内にありません。

ここで私の質問があります: なぜこのエラーが発生するのですか? どうすればエラーが発生するのでしょうか?

ありがとう!

4

1 に答える 1

3

ドキュメントをもう一度読んだ後、「CurrentProfileTypes プロパティから取得したプロファイル タイプを渡すときは、get_FirewallEnabled と put_FirewallEnabled にプロファイル タイプを 1 つだけ渡すようにしてください。get_CurrentProfileTypes は複数のプロファイルを返すことができることに注意してください。」という行に出くわしました。

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

はい、実際には複数のプロファイル タイプが返されました。そのため、FirewallEnabled の get メソッドと set メソッドにプロファイルを 1 つだけ渡すと、API が機能します。例えば:

result = (fwPolicy2.get_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PUBLIC));
于 2013-02-19T07:23:42.607 に答える