2012-02-07 17 views
5

ho questo pezzo di codice che ho trovato e attuata in funzione http://www.activexperts.com/activmonitor/windowsmanagement/scripts/networking/windowsfirewall/Delphi 7 Windows Vista/7 Firewall Eccezione Percorsi di rete

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; 

Il fatto è che, in Windows 7, si aggiunge l'eccezione solo come pubblica e non come privato come si può vedere cerchiata in RED qui

enter image description here

Quando è impostato su pubblico solo, il mio programma ha problemi di accesso a mio ospite tramite un FT Connessione P, rendendo quindi il mio programma inutile. Questo problema è particolare solo per Windows Vista/7; su XP, la configurazione corrente funziona correttamente.

Per favore, se avete qualche idea o indicazioni utili, condivideteli.

risposta

8

A partire da Windows Vista è necessario utilizzare le interfacce INetFwPolicy2 e INetFwRule per accedere alle nuove funzionalità del firewall.

Prova questo esempio che aggiunge una nuova regola nel profilo Pubblico e Privato.

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

Perché il downvote? – RRUZ

+0

Wow funziona abbastanza bene, rende addirittura irremovibili le policy private e pubbliche di Fire Wall! Grazie mille RRUZ! – ziGi

+0

cosa succede se CreateOleObject restituisce nil? btw, c'è la pagina MSDN per CreateOleObject con documentazione che cosa può e non può restituire? –

Problemi correlati