与えられた - 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#に翻訳可能である必要があります。)