2012-02-07 109 views
5

我的代碼,我發現這個塊,並實現了根據http://www.activexperts.com/activmonitor/windowsmanagement/scripts/networking/windowsfirewall/Delphi 7中的Windows Vista/7防火牆例外網絡位置

procedure AddExceptionToFirewall (Caption: String; Executable: String); 
var 
    FirewallMsg: OleVariant; 
    Application: OleVariant; 
    CurrentProfile: OleVariant; 
begin 
    FirewallMsg:= CreateOLEObject ('HNetCfg.FwMgr'); 
    CurrentProfile:= FirewallMsg.LocalPolicy.CurrentProfile; 
    Application:= CreateOLEObject ('HNetCfg.FwAuthorizedApplication'); 
    Application.ProcessImageFileName:= Executable; 
    Application.Name:= Caption; 
    Application.Scope:= FW_SCOPE_ALL; 
    Application.IpVersion:= FW_IP_VERSION_ANY; 
    Application.Enabled:= True; 
    CurrentProfile.AuthorizedApplications.Add (Application); 
end; 

的事情是,在Windows 7上,它增加了異常只能作爲公共及沒有私人你可以看到盤旋在RED在這裏

enter image description here

當設置爲只公開,我的方案有通過FT訪問我的主機出現問題P連接,從而使我的程序無用。 此問題僅適用於Windows Vista/7;在XP上,當前的配置工作正常。

如果您有任何線索或有用的指針,請分享它們。

回答

8

從Windows Vista開始,您必須使用INetFwPolicy2INetFwRule接口訪問新的防火牆功能。

試試這個示例,在公共和私人配置文件中添加一條新規則。

procedure AddExceptionToFirewall(Const Caption, Executable: String); 
const 
NET_FW_PROFILE2_DOMAIN = 1; 
NET_FW_PROFILE2_PRIVATE = 2; 
NET_FW_PROFILE2_PUBLIC = 4; 

NET_FW_IP_PROTOCOL_TCP = 6; 
NET_FW_ACTION_ALLOW = 1; 
var 
    fwPolicy2  : OleVariant; 
    RulesObject : OleVariant; 
    Profile  : Integer; 
    NewRule  : OleVariant; 
begin 
    Profile    := NET_FW_PROFILE2_PRIVATE OR NET_FW_PROFILE2_PUBLIC; 
    fwPolicy2   := CreateOleObject('HNetCfg.FwPolicy2'); 
    RulesObject   := fwPolicy2.Rules; 
    NewRule    := CreateOleObject('HNetCfg.FWRule'); 
    NewRule.Name  := Caption; 
    NewRule.Description := Caption; 
    NewRule.Applicationname := Executable; 
    NewRule.Protocol := NET_FW_IP_PROTOCOL_TCP; 
    NewRule.Enabled := TRUE; 
    NewRule.Profiles := Profile; 
    NewRule.Action := NET_FW_ACTION_ALLOW; 
    RulesObject.Add(NewRule); 
end; 
+1

爲什麼downvote? – RRUZ 2012-02-08 04:19:34

+0

哇,這工作很好,它甚至使防火牆的私人和公共政策手動不可移動! 非常感謝RRUZ! – ziGi 2012-02-09 02:36:13

+0

如果CreateOleObject返回nil,該怎麼辦?順便說一句,有CreateDNObject的MSDN頁與文檔它可以和不能返回? – 2013-06-09 13:33:48