与えられた - SP2 と複数のネットワーク アダプターを備えた .Net 2.0 XP マシン
ネットワーク アダプタがファイアウォールで保護されているかどうかを確認するために使用できる API はありますか?
OneGuyInDC
与えられた - SP2 と複数のネットワーク アダプターを備えた .Net 2.0 XP マシン
ネットワーク アダプタがファイアウォールで保護されているかどうかを確認するために使用できる API はありますか?
OneGuyInDC
以下の c# コードを試してみてください。Windows 7 (および Vista) および XP で動作します。これは、現在のプロファイルのステータスを取得し、Windows ファイアウォールを有効/無効にします。例: ホーム/ドメイン/パブリック アクセス ネットワーク。
使用法:
getFirewallStatus() --> Windows ファイアウォールが有効か無効かを true/false で返します。 setFirewallStatus(newStatus) --> ファイアウォールの有効/無効を、渡された true/false 値に設定します たとえば、ファイアウォールを有効にするには: setFirewallStatus(真) getCurrPolicy() --> 他の 2 つの方法で使用 isWinXP() --> Windows のバージョンが WinXP/2000 以降かどうかを返します。つまり、Vista/Win7 です。 使用するコードを決定するために他のメソッドによって使用されます。
コード:
NetFwTypeLib を使用します。 // (参照に追加することを忘れないでください。COM タブの下にあります) パブリックブール isWinXP() { オペレーティング システム os = Environment.OSVersion; int majorVersion = os.Version.Major; // http://msdn.microsoft.com/en-us/library/ms724832(v=vs.85).aspx を参照 if (majorVersion < 6) // OSがVistaでもWindows7でもない場合 { true を返します。 } そうしないと { false を返します。 } } プライベート スタティック INetFwPolicy2 getCurrPolicy() { INetFwPolicy2 fwPolicy2; Type tNetFwPolicy2 = Type.GetTypeFromProgID("HNetCfg.FwPolicy2"); fwPolicy2 = (INetFwPolicy2)Activator.CreateInstance(tNetFwPolicy2); fwPolicy2 を返します。 } public bool getFirewallStatus() { ブール結果 = false; スイッチ (isWinXP()) { 真: Type NetFwMgrType = Type.GetTypeFromProgID("HNetCfg.FwMgr", false); INetFwMgr mgr = (INetFwMgr)Activator.CreateInstance(NetFwMgrType); 結果 = mgr.LocalPolicy.CurrentProfile.FirewallEnabled; 壊す; ケース false: INetFwPolicy2 fwPolicy2 = getCurrPolicy(); NET_FW_PROFILE_TYPE2_ fwCurrentProfileTypes; // 現在のプロファイル タイプを読み取ります (パフォーマンスを向上させるためのみ) // 各プロパティからの CurrentProfileTypes へのアクセスを回避します fwCurrentProfileTypes = (NET_FW_PROFILE_TYPE2_)fwPolicy2.CurrentProfileTypes; 結果 = (fwPolicy2.get_FirewallEnabled(fwCurrentProfileTypes)); 壊す; デフォルト: 結果 = false; // デフォルトで Win7 を想定 壊す; } 結果を返します。 } public void setFirewallStatus(bool newStatus) { スイッチ (isWinXP()) { 真: Type NetFwMgrType = Type.GetTypeFromProgID("HNetCfg.FwMgr", false); INetFwMgr mgr = (INetFwMgr)Activator.CreateInstance(NetFwMgrType); mgr.LocalPolicy.CurrentProfile.FirewallEnabled = newStatus; 壊す; ケース false: NET_FW_PROFILE_TYPE2_ fwCurrentProfileTypes; INetFwPolicy2 currPolicy = getCurrPolicy(); // 現在のプロファイル タイプを読み取ります (パフォーマンスを向上させるためのみ) // 各プロパティからの CurrentProfileTypes へのアクセスを回避します fwCurrentProfileTypes = (NET_FW_PROFILE_TYPE2_)currPolicy.CurrentProfileTypes; currPolicy.set_FirewallEnabled(fwCurrentProfileTypes, newStatus); 壊す; デフォルト: NET_FW_PROFILE_TYPE2_ fwCurrentProfileTypes1; INetFwPolicy2 currPolicy1 = getCurrPolicy(); // 現在のプロファイル タイプを読み取ります (パフォーマンスを向上させるためのみ) // 各プロパティからの CurrentProfileTypes へのアクセスを回避します fwCurrentProfileTypes1 = (NET_FW_PROFILE_TYPE2_)currPolicy1.CurrentProfileTypes; currPolicy1.set_FirewallEnabled(fwCurrentProfileTypes1, newStatus); 壊す; } }
次の理由により、一般的に(たとえば、外部ファイアウォールがあるかどうか)知ることはできません。
ただし、特定のネットワークインターフェイスでWindowsファイアウォールが有効になっているかどうかを確認するためのAPIがあります。COM相互運用機能を使用してINetFwProfile(グローバルファイアウォールステータス用)およびINetSharingConfiguration(特定のネットワークインターフェイス用)インターフェイスを取得し、INetFwProfile.FirewallEnabledおよびINetSharingConfiguration.InternetFirewallEnabledを確認する必要があります。
リンクおよびこれらの結果を使用して有効なファイアウォールステータスを判断する方法については、http://msdn.microsoft.com/en-us/library/aa364717%28VS.85%29.aspxを参照してください。(VBScriptで記述されていますが、C#に翻訳可能である必要があります。)