我正在开发一个项目,必须能够通过programm启用/禁用Windows 7 Embedded系统的集成Windows防火墙。
使用代码:
private static INetFwPolicy2 getCurrPolicy()
{
INetFwPolicy2 fwPolicy2;
Type tNetFwPolicy2 = Type.GetTypeFromProgID("HNetCfg.FwPolicy2");
if (tNetFwPolicy2 != null)
fwPolicy2 = (INetFwPolicy2)Activator.CreateInstance(tNetFwPolicy2);
else
return null;
return fwPolicy2;
}
public static bool GetFirewallStatus()
{
bool result = false;
try
{
INetFwPolicy2 fwPolicy2 = getCurrPolicy();
NET_FW_PROFILE_TYPE2_ fwCurrentProfileTypes;
//read Current Profile Types (only to increase Performace)
//avoids access on CurrentProfileTypes from each Property
fwCurrentProfileTypes = NET_FW_PROFILE_TYPE2_)fwPolicy2.CurrentProfileTypes;
result = (fwPolicy2.get_FirewallEnabled(fwCurrentProfileTypes));
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
return result;
}
public static void SetFirewallStatus(bool newStatus)
{
try
{
NET_FW_PROFILE_TYPE2_ fwCurrentProfileTypes;
INetFwPolicy2 currPolicy = getCurrPolicy();
//read Current Profile Types (only to increase Performace)
//avoids access on CurrentProfileTypes from each Property
fwCurrentProfileTypes = NET_FW_PROFILE_TYPE2_)currPolicy.CurrentProfileTypes;
currPolicy.set_FirewallEnabled(fwCurrentProfileTypes, newStatus);
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
在currPolicy对象的每次函数调用中,我都会收到以下消息:
System.ArgumentException:值不在预期范围内。
现在有一个问题:为什么我会收到此错误,如何才能使其正常工作?
谢谢!
答案 0 :(得分:3)
再次阅读文档后,我遇到了这个问题 “当您传递从CurrentProfileTypes属性获取的配置文件类型时,请确保只将一个配置文件类型传递给get_FirewallEnabled和put_FirewallEnabled。请注意,get_CurrentProfileTypes可以返回多个配置文件。”
(http://msdn.microsoft.com/en-us/library/windows/desktop/aa365316%28v=vs.85%29.aspx)
是的,我实际上已经返回了多个配置文件类型。 因此,只有将一个配置文件传递给FirewallEnabled的get和set方法时,API才有效。 e.g:
result = (fwPolicy2.get_FirewallEnabled(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PUBLIC));