SYS, VxD e DLL : che cosa sono e a cosa servono

In generale un driver è un insieme di funzioni che manipolano un dispositivo hardware. Nel mondo Windows 95 esistono due possibilità per implementare un driver. Nell'ambiente Windows NT uno solo. Tutti e tre i modi sono piuttosto differenti. Qui di seguito è riportato il metodo con il quale viene scritto un driver in ambiente Windows 95.

Il primo modo prevede l’implementazione di una DLL, cui l’applicativo si appoggia: essa può essere in grado di accedere all’hardware del sistema tramite delle system call. L’uso di DLL-Driver è possibile solo con Windows 95 ed è un'eredità del metodo con il quale erano scritti i device driver in Windows 3.1.

Altri sistemi operativi, quali Windows NT o Unix per esempio, permettono l’accesso alle risorse fisiche del sistema solo ed esclusivamente ai driver. Una volta caricata in memoria, la DLL gira logicamente al livello di privilegio 3 (o Ring 3), quello in cui vengono eseguite tutte le applicazioni utente.

Il secondo consiste nell’implementazione di codice privilegiato (chiamato VxD nell’ambiente Windows), completamente separato dall’applicazione, che esporta un certo numero di servizi di cui qualunque applicazione o DLL deve servirsi per accedere ai dispositivi fisici.

La caratteristica principale dei VxD è che il loro codice che gira a livello 0 (o Ring 0). In questa modalità è possibile accedere a qualunque risorsa di sistema (p.e. memoria, porte di I/O) senza nessun controllo da parte dei meccanismi di protezione del S.O. o del processore.

Nel caso di un driver di protocollo che si interfaccia al driver NDIS l’unica possibilità è quella di sviluppare un VxD.

Il VxD sfrutta il meccanismo di consegna e di ricezione implementato dall’NDIS; le sue funzionalità basilari di cattura sono state estese a livello di applicazione. Quest’ultima può essere o un’applicazione utente che utilizza direttamente il VXD aprendolo come un file e colloquiando con esso mediante la DeviceIOControl, oppure una DLL.

La DLL implementa delle funzioni che permettono di comunicare con il VXD. Comunque la convenienza principale dell’utilizzo della DLL è quella di fornire una interfaccia che permetta di isolare il VXD dalle applicazioni.

Non solo, la DLL è utile anche serializzare gli accessi al VXD. Quest’ultimo in questo modo può essere condiviso tra più applicazioni: è pensabile infatti che vengano sottoposte al VxD molte richieste contemporanee. La DLL dunque da l’accesso ad una sola applicazione alla volta realizzando la mutua esclusione.

L'approccio con il quale vengono scritti i device driver per Windows NT è analogo a quello con cui si scrivono i VxD. I device driver sono eseguiti in modalità protetta e hanno il massimo livello di privilegio. I dettagli implementativi con cui il device driver si interfaccia al sistema operativo sono però piuttosto diversi. Anche per il device driver di Windows NT è stata creata una libreria DLL che permette di avere gli stessi vantaggi della DLL di Windows 95.

Descrizione dell'NDIS

L’NDIS è un insieme di specifiche che definisce la comunicazione tra scheda di rete (o meglio il driver che la pilota) e i software che implementano i protocolli (IP,IPX,..). Nella terminologia NDIS i driver che pilotano la scheda di rete sono chiamati driver di rete mentre i driver che implementano i protocolli sono chiamati driver di protocollo. L’NDIS supporta più driver di rete e più driver di protocollo; ognuno di questi si registra presso l’NDIS esportando delle funzioni che poi lo stesso NDIS provvederà a richiamare quando si stabilisce una comunicazione dal driver di rete verso quello di protocollo o viceversa.