2011-04-20 189 views
13

如何以編程方式將應用程序或端口添加到Windows XP上的Windows防火牆?XP的Windows防火牆規則

+0

可能重複的[編程向Windows vista防火牆添加例外](http://stackoverflow.com/questions/1409896/programatically-add-exception-to-windows-vista-firewall) – 2011-04-20 13:34:38

+0

可能的重複[Add to防火牆例外列表](http://stackoverflow.com/questions/2384718/add-to-firewall-exception-list) – 2011-04-20 14:11:47

+2

這個答案只適用於XP。因爲OP接受了這個及其有用的信息,所以不是一個騙局,因爲重複的作品只在win7和vista中。 – 2012-07-07 22:09:31

回答

17

嘗試從我們的開源SQlite3UI.pas部提取出驗證碼:

function GetXPFirewall(var fwMgr, profile: OleVariant): boolean; 
begin 
    Result := (Win32Platform=VER_PLATFORM_WIN32_NT) and 
    (Win32MajorVersion>5) or ((Win32MajorVersion=5) and (Win32MinorVersion>0)); 
    if result then // need Windows XP at least 
    try 
    fwMgr := CreateOleObject('HNetCfg.FwMgr'); 
    profile := fwMgr.LocalPolicy.CurrentProfile; 
    except 
    on E: Exception do 
     result := false; 
    end; 
end; 

const 
    NET_FW_PROFILE_DOMAIN = 0; 
    NET_FW_PROFILE_STANDARD = 1; 
    NET_FW_IP_VERSION_ANY = 2; 
    NET_FW_IP_PROTOCOL_UDP = 17; 
    NET_FW_IP_PROTOCOL_TCP = 6; 
    NET_FW_SCOPE_ALL = 0; 
    NET_FW_SCOPE_LOCAL_SUBNET = 1; 

procedure AddApplicationToXPFirewall(const EntryName, ApplicationPathAndExe: string); 
var fwMgr, profile, app: OleVariant; 
begin 
    if GetXPFirewall(fwMgr,profile) then 
    try 
    if profile.FirewallEnabled then begin 
     app := CreateOLEObject('HNetCfg.FwAuthorizedApplication'); 
     try 
     app.ProcessImageFileName := ApplicationPathAndExe; 
     app.Name := EntryName; 
     app.Scope := NET_FW_SCOPE_ALL; 
     app.IpVersion := NET_FW_IP_VERSION_ANY; 
     app.Enabled :=true; 
     profile.AuthorizedApplications.Add(app); 
     finally 
     app := varNull; 
     end; 
    end; 
    finally 
    profile := varNull; 
    fwMgr := varNull; 
    end; 
end; 

procedure AddPortToXPFirewall(const EntryName: string; PortNumber: cardinal); 
var fwMgr, profile, port: OleVariant; 
begin 
    if GetXPFirewall(fwMgr,profile) then 
    try 
    if profile.FirewallEnabled then begin 
     port := CreateOLEObject('HNetCfg.FWOpenPort'); 
     port.Name := EntryName; 
     port.Protocol := NET_FW_IP_PROTOCOL_TCP; 
     port.Port := PortNumber; 
     port.Scope := NET_FW_SCOPE_ALL; 
     port.Enabled := true; 
     profile.GloballyOpenPorts.Add(port); 
    end; 
    finally 
    port := varNull; 
    profile := varNull; 
    fwMgr := varNull; 
    end; 
end; 

它可以讓你將應用程序或端口添加到XP防火牆。 應該從Delphi 6一直工作到XE。

+1

我已經更新了單元的源代碼,可以在XP,Vista和Seven上運行,可以用於應用程序,也可以用於端口。請參閱http://synopse.info/forum/viewtopic.php?pid=4652#p4652 – 2012-07-11 06:51:16

6

腳本編寫Windows防火牆是可能的,例如見Scripting the Windows Firewall

和代碼示例here

+0

我使用Delphi 7! – 2011-04-20 10:03:14

+0

Delphi 7支持基於COM的腳本 – mjn 2011-04-20 10:06:01

+0

在這種情況下,您應該嘗試導入類型庫,請參閱我的鏈接,它提到類型庫DLL文件通常位於「C:\ Windows \ System32 \ hnetcfg.dll」 (這篇文章是關於XP的,我在Windows 7中檢查過,並且有這個名字的文件存在) – mjn 2011-04-20 10:27:33

相關問題