Uso di WDF per sviluppare un driver

Questo argomento offre una panoramica generale degli oggetti framework che verranno usati per sviluppare un driver Kernel-Mode Driver Framework (KMDF). Tranne dove indicato, si useranno gli stessi oggetti per sviluppare un driver User-Mode Driver Framework (UMDF) a partire da UMDF versione 2.

I driver WDF (Windows Driver Framework) sono costituiti da una routine DriverEntry e da un set di funzioni di callback degli eventi definite dagli oggetti di Windows Driver Framework usati dai driver basati su framework. Le funzioni di callback chiamano metodi oggetto che il framework esporta. Windows Driver Kit (WDK) contiene driver WDF di esempio che illustrano come implementare le funzioni di callback degli eventi di un driver. È possibile scaricare questi esempi da Windows Dev Center - Hardware. Per informazioni sugli esempi disponibili, vedere Driver KMDF di esempio e driver UMDF di esempio.

Quando si crea un driver WDF, in genere si eseguiranno le operazioni seguenti:

  • Usare un oggetto driver framework per rappresentare il driver.

    La routine DriverEntry del driver deve chiamare WdfDriverCreate per creare un oggetto driver framework che rappresenta il driver. Il metodo WdfDriverCreate registra anche la funzione di callback EvtDriverDeviceAdd del driver, che il framework chiama ogni volta che il manager Plug and Play (PnP) segnala l'esistenza di un dispositivo supportato dal driver.

  • Usare gli oggetti dispositivo framework per supportare PnP e risparmio energia nel driver.

    Tutti i driver devono chiamare WdfDeviceCreate per creare un oggetto dispositivo framework per ogni dispositivo supportato da un driver. Un dispositivo può essere un componente hardware collegato al computer oppure può essere un dispositivo solo software. Gli oggetti dispositivo framework supportano le operazioni PnP e risparmio energia e i driver possono registrare funzioni di callback degli eventi che notificano al driver quando un dispositivo entra o lascia il proprio stato di lavoro.

    Per altre informazioni sugli oggetti dispositivo framework, vedere Supporto di PnP e risparmio energia nel driver.

  • Usare oggetti coda framework e oggetti richiesta framework per supportare le operazioni di I/O nel driver.

    Tutti i driver che ricevono richieste di controllo di I/O di lettura, scrittura o dispositivo da applicazioni o altri driver devono chiamare WdfIoQueueCreate per creare oggetti code del framework che rappresentano code di I/O. In genere, i driver registrano uno o più gestori di richieste per ogni coda di I/O. Quando il gestore di I/O invia una richiesta di I/O al driver, il framework crea un oggetto richiesta framework per la richiesta, inserisce l'oggetto richiesta in una coda di I/O e chiama uno dei gestori delle richieste del driver per informare il driver che una richiesta è disponibile. Il driver ottiene la richiesta di I/O e può rieseguere, completare, annullare o inoltrare la richiesta.

    Per altre informazioni sull'uso degli oggetti coda e delle richieste del framework, vedere Oggetti coda framework e Oggetti richiesta framework.

  • Usare gli oggetti interrupt del framework per gestire gli interrupt del dispositivo.

    I driver che gestiscono gli interrupt del dispositivo devono chiamare WdfInterruptCreate per creare un oggetto interrupt del framework per ogni interrupt e registrare le funzioni di callback. Queste funzioni di callback abilitano e disabilitano l'interrupt e fungono da routine del servizio di interruzione (ISR) e chiamata di routine posticipata (DPC) per l'interrupt.

    Per altre informazioni sugli oggetti interrupt del framework, vedere Gestione degli interrupt hardware.

  • I driver KMDF possono usare gli oggetti di abilitazione DMA del framework e gli oggetti transazione DMA per gestire le operazioni DMA (Direct Memory Access) di un dispositivo.

    Se il dispositivo del driver KMDF supporta le operazioni DMA, il driver deve chiamare WdfDmaEnablerCreate per creare un oggetto enabler DMA e WdfDmaTransactionCreate per creare uno o più oggetti transazione DMA. L'oggetto transazione DMA definisce una funzione di callback EvtProgramDma che programma l'hardware del dispositivo per eseguire un'operazione DMA.

    Per altre informazioni sul supporto delle operazioni DMA, vedere Gestione delle operazioni DMA nei driver basati su Framework.

  • Usare gli oggetti di destinazione di I/O del framework per inviare richieste di I/O ad altri driver.

    Per passare richieste di I/O ad altri driver (in genere il driver inferiore successivo nello stack di driver), il driver invia la richiesta a un oggetto di destinazione di I/O.

    Per altre informazioni sugli oggetti di destinazione di I/O, vedere Using I/O Targets .For more information about I/O target objects, see Using I/O Targets.

  • Un driver KMDF può usare gli oggetti provider WMI del framework e gli oggetti dell'istanza WMI per supportare le funzionalità di Strumentazione gestione Windows (WMI).

    La maggior parte dei driver KMDF deve supportare WMI e chiamare WdfWmiInstanceCreate per registrare le funzioni di callback che inviano o ricevono dati WMI.

    Per altre informazioni su WMI, vedere Supporto di WMI nei driver basati su framework.

  • Usare le funzionalità di sincronizzazione del framework.

    Tutti i driver devono essere consapevoli dei problemi di sincronizzazione del multiprocessore e devono usare tecniche di sincronizzazione fornite dal framework.

  • Usare oggetti e funzionalità aggiuntivi forniti dal framework.

    Il framework fornisce oggetti aggiuntivi che il driver può usare. Per altre informazioni su questi oggetti, vedere Oggetti di supporto WDF.