Modello di programmazione DDI DDI UMDF
Avviso
UMDF 2 è la versione più recente di UMDF e sostituisce UMDF 1. Tutti i nuovi driver UMDF devono essere scritti usando UMDF 2. Nessuna nuova funzionalità viene aggiunta a UMDF 1 ed è disponibile un supporto limitato per UMDF 1 nelle versioni più recenti di Windows 10. I driver di Windows universali devono usare UMDF 2.
Gli esempi di UMDF 1 archiviati sono disponibili nell'Windows 11, versione 22H2 - Aggiornamento degli esempi di driver di maggio 2022.
Per altre informazioni, vedere Introduzione con UMDF.
Il framework e il driver UMDF comunicano tramite UMDF DDI. L'UMDF DDI è simile all'DDI kmDF, ad eccezione del fatto che l'UMDF DDI è basato su COM. Pertanto, i writer di driver che hanno familiarità con KMDF comprenderanno UMDF.
Per ogni tipo di oggetto framework, la UMDF definisce un'interfaccia tramite la quale modificare le istanze dell'oggetto. Ogni interfaccia supporta metodi e proprietà. I metodi definiscono le azioni che possono essere eseguite per conto dell'oggetto e delle proprietà impostate e recuperano le caratteristiche dell'oggetto. Alcune interfacce vengono implementate dal framework e altre vengono implementate dal driver. Le interfacce esposte da un oggetto framework sono dell'oggetto IWDF<del modulo, mentre le interfacce di callback degli eventi esposte da un driver sono dell'azione> dell'oggetto><I<form, in cui><l'oggetto rappresenta una coda, una richiesta e così via <e l'azione> indica cosa fa l'interfaccia.> I metodi delle interfacce di callback iniziano con "On".
Il driver UMDF comunica con gli oggetti del framework tramite i relativi metodi e proprietà. Il framework comunica con il driver tramite notifiche degli eventi, che sono funzioni di callback che il framework può chiamare per notificare al driver eventi specifici. Per registrare le funzioni di callback, il driver può chiamare, ad esempio, i metodi dell'oggetto framework seguenti e può passare un puntatore all'interfaccia IUnknown associata a tutte le interfacce per le funzioni di callback supportate dal driver.
Come esempio di comunicazione tra driver e framework, considerare l'oggetto di coda di I/O predefinito di un dispositivo. Un driver può chiamare metodi, ad esempio IWDFIoQueue::GetState, per recuperare informazioni sullo stato sulla coda I/O o o IWDFIoQueue::RetrieveNextRequest per recuperare una richiesta dalla coda I/O. Un driver può anche richiedere notifiche nella coda di I/O chiamando il metodo IWDFDevice::CreateIoQueue per registrare interfacce di callback, ad esempio IQueueCallbackRead e IQueueCallbackWrite. I metodi di queste interfacce vengono chiamati successivamente dal framework quando un'applicazione invia richieste di lettura e scrittura.
Il framework fornisce qualsiasi sincronizzazione necessaria nei metodi di callback del driver. Per impostazione predefinita, il framework sincronizza a livello di oggetto dispositivo; ovvero, il framework non chiama simultaneamente i metodi di callback dell'evento a o al di sotto del livello di oggetto del dispositivo. Un driver può eseguire l'override di questa impostazione predefinita richiedendo nessuna sincronizzazione. Per altre informazioni, vedere Specifica di una modalità di sincronizzazione callback.