INetFwPolicy2インターフェイスを使用すると、アプリケーションまたはサービスはファイアウォールポリシーにアクセスできます。私は、Visual Studioを使用していますファイアウォールを有効/無効にする方法は?
質問はこれに関連しているhttps://stackoverflow.com/a/33700472/2451446
コードは少し異なっていると私は防火壁を無効にする問題を抱えています。
ファイアウォールを無効にする前のロジックは問題ありません。
public Task<StatusCodeResult> ResetFirewallStatus()
{
Type netFwPolicy2Type = Type.GetTypeFromProgID("HNetCfg.FwPolicy2");
dynamic mgr = Activator.CreateInstance(netFwPolicy2Type);
var fwCurrentProfileTypes = mgr.CurrentProfileTypes;
// Get current status
bool firewallEnabled = mgr.FirewallEnabled(fwCurrentProfileTypes); // return true
// Disables Firewall
mgr.FirewallEnabled(false); //breaks here !!!!
return Task.FromResult<StatusCodeResult>(Ok());
}
エラーメッセージは次のとおりです。
System.ArgumentExceptionの: '値が予想 範囲内に収まっていません。' '' システム.__ ComObject」:
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:
は私がある。この場合のエラーでも
set_FirewallEnabled(fwCurrentProfileTypes,false);
と
put_FirewallEnabled(fwCurrentProfileTypes,false)
を使用しようとしました 'set_FirewallEnabled'( 'put_FirewallEnabled' ')の定義が含まれていません
編集
私の解決策:
const int domainProfile = 1;
const int privateProfile = 2;
const int publicProfile = 4;
public bool EnableDisableFirewall(bool enableFirewall)
{
dynamic mgr = getFwPolicy2();
mgr.FirewallEnabled[domainProfile] = enableFirewall;
mgr.FirewallEnabled[privateProfile] = enableFirewall;
mgr.FirewallEnabled[publicProfile] = enableFirewall;
return enableFirewall;
}
public bool IsFirewallOn()
{
dynamic mgr = getFwPolicy2();
// Get current status
var isDomainProfileEnabled = mgr.FirewallEnabled(domainProfile);
var isPrivateProfileEnabled = mgr.FirewallEnabled(privateProfile);
var isPublicProfileEnabled = mgr.FirewallEnabled(publicProfile);
return isDomainProfileEnabled && isPrivateProfileEnabled && isPublicProfileEnabled;
}
private object getFwPolicy2()
{
Type netFwPolicy2Type = Type.GetTypeFromProgID("HNetCfg.FwPolicy2");
dynamic mgr = Activator.CreateInstance(netFwPolicy2Type);
return mgr;
}