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 limplementazione di una DLL, cui lapplicativo si appoggia: essa può essere in grado di accedere allhardware del sistema tramite delle system call. Luso 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 laccesso 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 nellimplementazione di codice privilegiato (chiamato VxD nellambiente Windows), completamente separato dallapplicazione, 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 lunica possibilità è quella di sviluppare un VxD.
Il VxD sfrutta il meccanismo di consegna e di ricezione implementato dallNDIS; le sue funzionalità basilari di cattura sono state estese a livello di applicazione. Questultima può essere o unapplicazione 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 dellutilizzo 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. Questultimo in questo modo può essere condiviso tra più applicazioni: è pensabile infatti che vengano sottoposte al VxD molte richieste contemporanee. La DLL dunque da laccesso 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.
LNDIS è 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. LNDIS supporta più driver di rete e più driver di protocollo; ognuno di questi si registra presso lNDIS 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.