2012-02-07 24 views
5

Tôi có đoạn mã này mà tôi tìm thấy và thực hiện theo http://www.activexperts.com/activmonitor/windowsmanagement/scripts/networking/windowsfirewall/Delphi 7 Windows Vista/7 Firewall Địa điểm ngoại lệ Mạng

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; 

Có điều là, trên Windows 7, nó bổ sung thêm ngoại lệ duy nhất là công cộng và không phải là cá nhân như bạn có thể nhìn thấy vòng tròn RED ở đây

enter image description here

Khi thiết lập để công cộng duy nhất, chương trình của tôi có vấn đề về truy cập vào máy chủ của tôi qua một FT P kết nối, do đó làm cho chương trình của tôi vô ích. Sự cố này chỉ dành riêng cho Windows Vista/7; trên XP, cấu hình hiện tại hoạt động tốt.

Vui lòng nếu bạn có bất kỳ đầu mối hoặc con trỏ hữu ích nào, hãy chia sẻ chúng.

Trả lời

8

Bắt đầu với Windows Vista, bạn phải sử dụng giao diện INetFwPolicy2INetFwRule để truy cập vào các tính năng tường lửa mới.

Hãy thử mẫu này thêm quy tắc mới trong hồ sơ công khai và riêng tư.

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

Tại sao lưu ý lại? – RRUZ

+0

Wow hoạt động khá tốt, nó thậm chí còn thể hiện chính sách riêng tư và công cộng của Tường lửa bằng tay không thể khắc phục! Cảm ơn rất nhiều RRUZ! – ziGi

+0

nếu CreateOleObject trả về nil thì sao? btw, là có trang MSDN cho CreateOleObject với tài liệu những gì nó có thể và không thể trở lại? –

Các vấn đề liên quan