0

このコードで80 TCPポートを使用してブロックまたはブロック解除しようとしていました:

 const string guidFWPolicy2 = "{E2B3C97F-6AE1-41AC-817A-F6F92166D7DD}";
const string guidRWRule = "{2C5BC43E-3369-4C33-AB0C-BE9469677AF4}";
Type typeFWPolicy2 = Type.GetTypeFromCLSID(new Guid(guidFWPolicy2));
Type typeFWRule = Type.GetTypeFromCLSID(new Guid(guidRWRule));
INetFwPolicy2 fwPolicy2 =(INetFwPolicy2)Activator.CreateInstance(typeFWPolicy2);
 INetFwRule newRule = (INetFwRule)Activator.CreateInstance(typeFWRule);
newRule.Name = "MabuAsTcpLocker_OutBound_Rule";
newRule.Description = "Block outbound traffic  over TCP port 80";
newRule.Protocol = (int)NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP;
newRule.RemotePorts = "80";                 
newRule.Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_OUT;
newRule.Enabled = true;
newRule.Profiles = fwPolicy2.CurrentProfileTypes;
newRule.Action = NET_FW_ACTION_.NET_FW_ACTION_BLOCK;
fwPolicy2.Rules.Add(newRule);

このコードは、Windows 7 では問題なく動作しますが、Windows XP では動作しませんでした。私のプロジェクトでは、NetFwTypeLib COM ライブラリを参照しました。例外は、{E2B3C97F-6AE1-41AC-817A-F6F92166D7DD} Guid でクラスを見つけてインスタンス化できなかったことを示しています。その点で私を助けてください。

4

1 に答える 1

1

Vista 以降向けの Advanced Security API を備えた Windows ファイアウォールに対して書いているようです。プレゼントは、INetFwPolicy2 を参照していることです。

MSDNから引用

Windows ファイアウォール API は、Windows XP Service Pack 2 (SP2) でサポートされています。(Windows Vista 以降では、高度なセキュリティ API を備えた Windows ファイアウォールの使用をお勧めします。)

Using Windows Firewall for Windows XP with SP2 API (Windows) を調べてみてください。これにより、いくつかの指針が得られるか、少なくともさらなる Google 検索のための弾薬が得られるはずです。

于 2013-03-14T17:40:10.790 に答える