title: Windows Driver Foundation
text: # Windows Driver Foundation
  
  Windows Driver Foundations, o WDF, è un framework creato da Microsoft per la scrittura dei device driver dei propri sistemi operativi Windows. Lo scopo del WDF è quello di ovviare ad una serie di problemi, evidenziatisi con il tempo, del Windows Driver Model creato per Windows 98/NT.
  
  ## Descrizione
  
  Il WDF è completamente event-driven ed orientato agli oggetti, specificamente pensato per alleggerire il lavoro dei programmatori permettendo loro di concentrarsi sull'hardware da gestire e sulle funzioni software da implementare, fornendo dei comportamenti di default per gli eventi che non interessano. Nel WDF esistono due sole classi di driver:
  
  * KMDF, Kernel-Mode Driver Foundations, per tutti quei driver che devono dialogare direttamente con l'hardware o lavorano comunque a contatto molto stretto con esso: il loro codice gira a ring zero, con gli stessi privilegi del sistema operativo.
  * UMDF, User-Mode Driver Foundations, per i driver che non hanno bisogno di dialogare con l'hardware ma possono connettersi al loro dispositivo attraverso un bus di collegamento (sfruttando quindi un altro driver). Per esempio driver per fotocamere digitali, player multimediali, dispositivi GPS ecc.
  
  Entrambi i tipi di driver contengono di default il codice ETW (Enhanced Tracing for Windows), che permette il tracciamento degli eventi software ricevuti, permettendo un più facile debug dei driver stessi. Il nuovo framework supporta inoltre automaticamente la firma digitale dei drivers, e introduce il versioning, un meccanismo che permetterà ai driver WDF di adattarsi alla particolare versione di Windows su cui sono installati. Per gli sviluppatori sono disponibili inoltre degli strumenti software aggiuntivi, PREfast e SDV, per eseguire la verifica statica del driver a tempo di compilazione. Ulteriore novità del WDF rispetto al passato è il supporto (solo il supporto, per ora) alla driver isolation, cioè il disaccoppiamento dei driver dal resto del kernel, per dare modo al sistema operativo di superare un eventuale errore interno del driver senza bloccarsi o andare in crash.
  
  Rispetto al precedente WDM le migliorie sono notevoli:
  
  * Non esistono più decine di modelli di driver diversi (miniport, di classe, di bus ecc.);
  * Le strutture dati interne del sistema operativo non sono più esposte al codice dei driver;
  * Entrambe le classi di driver WDF implementano internamente quasi tutta la logica di tracciamento degli stati interni di driver, hardware e sistema operativo necessaria per implementare il Plug and Play e la gestione energetica, eliminando così la principale fonte di errori di programmazione nei driver;
  * Entrambe le classi di driver WDF gestiscono automaticamente, in quanto event-driven, la ricezione e la trasmissione degli IRP (I/O Request Packet) fra il kernel, i dispositivi e gli altri driver;
  
  Le principali contropartite di queste migliorie sono una maggior dimensione del codice per i driver, che occuperanno quindi più spazio in memoria, e una probabile minor velocità, dovuta all'overhead dei meccanismi di separazione del WDF.
  
  