Firewall のオープン設定
参照設定に COM の NetFwTypeLib が必要。(Vista以降?)OS によって名前違うかも。
private static INetFwMgr GetFirewallManager() { Type type = Type.GetTypeFromProgID( "HNetCfg.FwMgr" ); return (INetFwMgr)Activator.CreateInstance( type ); } //アプリケーションを指定してファイアウォールを通過させる。 static public void AuthorizeApplication( string title, string filePath ) { Type type = Type.GetTypeFromProgID( "HNetCfg.FwAuthorizedApplication" ); INetFwAuthorizedApplication fwAuth = (INetFwAuthorizedApplication)Activator.CreateInstance( type ); fwAuth.Name = title; fwAuth.ProcessImageFileName = Path.GetFullPath( filePath ); fwAuth.Scope = NET_FW_SCOPE_.NET_FW_SCOPE_ALL; fwAuth.IpVersion = NET_FW_IP_VERSION_.NET_FW_IP_VERSION_ANY; fwAuth.Enabled = true; INetFwMgr manager = GetFirewallManager(); manager.LocalPolicy.CurrentProfile.AuthorizedApplications.Add( fwAuth ); } //ポートを指定してファイアウォールを通過させる。 public void OpenPort( string title, int portNo, NET_FW_IP_PROTOCOL_ protocol ) { Type type = Type.GetTypeFromProgID( "HNetCfg.FWOpenPort" ); INetFwOpenPort port = (INetFwOpenPort)Activator.CreateInstance( type ); port.Name = title; port.Port = portNo; port.Scope = NET_FW_SCOPE_.NET_FW_SCOPE_ALL; port.Protocol = protocol; port.IpVersion = NET_FW_IP_VERSION_.NET_FW_IP_VERSION_ANY; INetFwMgr manager = GetFirewallManager(); manager.LocalPolicy.CurrentProfile.GloballyOpenPorts.Add( port ); }
アプリ指定だとなぜかTCPとUDP両方指定されるんだけど。片一方ってのはわからん。
INetFwAuthorizedApplication にその設定ないし。