Lo sviluppatore tedesco (di adozione)
George Mamaladze ha cominciato ad interessarsi del firewall di Vista per poter gestire il deployment di applicazioni, ma è rimasto ben presto stupito, parole sue, dalle "
illimitate possibilità" offerte dalla
firewalling API in termini di gestione della configurazione,
molto più utile e trasparente dell'API per il firewall di Windows XP SP2. Non esistendo, ad oggi, una versione in codice .NET
managed che permetta di usare la libreria
NetFwTypeLib (
C: | windows | system32 | FirewallAPI.dll), ha pensato bene di svilupparne una
propria.
Per sua stessa ammissione,
la libreria gma.Windows.Firewall copre solo il 5% delle sterminate funzionalità offerte da
FirewallAPI.dll, ma come si suol dire
ogni saga ha un inizio, e non dubito che
Mamaladze troverà chi lo aiuterà in questo utile compito. L'
articolo di presentazione copre solo l'uso di base, ovvero l'
instanziazione della classe
Policy per recuperare le regole del firewall mediante l'uso dei
generics, e la loro presentazione mediante il potente controllo
GridView. Viene anche sottolineato il largo uso di classi interne per nascondere le chiamate COM ed esporre codice 100%
managed.
Ma nella libreria, com'è lecito aspettarsi, c'è molto di più:
Rule è una classe di sole proprietà in lettura/scrittura, a sua volta ereditata da
Rules, che recupera l'elenco delle proprietà del firewall tramite un semplice ciclo che usa i citati
generics ed una classe interna che legge da
INetFwRules; ma il cuore della libreria è sicuramente
Policy.cs. Questa classe, dopo aver creato nel costruttore un'istanza da
ProgID di
HNetCfg.FwPolicy2, recupera tramite
reflection tutte le impostazioni del firewall, dalle regole alle interfacce, alle restrizioni di servizio alle notifiche, facendo uso in gran parte di classi
helper che sono, in sostanza, dei tipi
enumeration. Il progetto di esempio è un capolavoro di semplicità, grazie soprattutto alla potenza e versatilità dei controlli .NET 2.0: si riduce, in tutto, a tre righe di codice, una delle quali istanzia la classe
Policy, mentre le altre due ne sfruttano i metodi per popolare due controlli
PropertyGrid e GridView.