电脑技术学习

如何透过程序来控制 Windows XP防火墙的开关

dn001

Dim;objFW;As;Object;;;

Set;objFW;=;CreateObject("HNetCfg.FwMgr").LocalPolicy.CurrentProfile
With;objFW
.FirewallEnabled;=;True;';True;开启;,;False;关闭
.ExceptionsNotAllowed;=;True;';[;不允许例外;];选项;,;True;勾;,;反之则不勾
End;With




procedure;Set_WindowsXP_FireWall(Enable:;boolean);
//;需引用;winsvc,;shellapi
//;Set_WindowsXP_FireWall(false);;//;关闭Windows;Xp;防火
//
var
SCM,;hService:;LongWord;
sStatus:;TServiceStatus;
begin
if;Enable;=;false;then
begin
SCM;:=;OpenSCManager(nil,;nil,;SC_MANAGER_ALL_ACCESS);
hService;:=;OpenService(SCM,;PChar('SharedAccess'),;SERVICE_ALL_ACCESS);
ControlService(hService,;SERVICE_CONTROL_STOP,;sStatus);
CloseServiceHandle(hService);
end;
end;

设定Port;的部份,不过还没测试!不过我还是希望写成简单形式的函数库呼叫方式,大家一起测试吧!

出处:http://www-new.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q_22122056.html
Example;of;both;adding;and;removing;a;tcp;port;from;the;globaly;open;ports;list;(in;Windows;XP;firewall)

Regards,
Russell

//;Include;ActiveX;and;ComObj;in;uses;clause;(also;Variants;for;D6;and;up)

const
NET_FW_PROFILE_DOMAIN;;;;;;=;;0;
NET_FW_PROFILE_STANDARD;;;;=;;1;

const
NET_FW_IP_PROTOCOL_TCP;;;;;=;6;
NET_FW_IP_PROTOCOL_UDP;;;;;=;17;

const
NET_FW_SCOPE_ALL;;;=;;0;

const
NET_FW_IP_VERSION_ANY;;;;;;=;;2;

implementation
{$R;*.DFM}

procedure;TForm1.Button1Click(Sender:;TObject);
var;;ovMgr:;OleVariant;
ovProfile:;;;;;OleVariant;
ovPort:OleVariant;
begin

//;Create;manager;interface
ovMgr:=CreateOleObject('HNetCfg.FwMgr');

//;Resource;protection
try
//;Get;local;profile;interface
ovProfile:=ovMgr.LocalPolicy.CurrentProfile;
//;Resource;protection
try
//;Create;new;port;interface
ovPort:=CreateOleObject('HNetCfg.FwOpenPort');
try
//;Set;port;properties
ovPort.Port:=81;
ovPort.Name:='Whatever';
ovPort.Scope:=NET_FW_SCOPE_ALL;
ovPort.IpVersion:=NET_FW_IP_VERSION_ANY;
ovPort.Protocol:=NET_FW_IP_PROTOCOL_TCP;
ovPort.Enabled:=True;
//;Resource;protection
try
//;Add;to;globally;open;ports
ovProfile.GloballyOpenPorts.Add(ovPort);

////
//;....;do;whatever;....
////

finally
//;Remove;from;globally;open;ports
ovProfile.GloballyOpenPorts.Remove(81,;NET_FW_IP_PROTOCOL_TCP);
end;
finally
//;Release;interface
ovPort:=Unassigned;
end;
finally
//;Release;interface
ovProfile:=Unassigned;
end;
finally
//;Release;interface
ovMgr:=Unassigned;
end;

end;

标签: 防火墙