Oggetti file Driver-Created contro Application-Created

Avvertimento

UMDF 2 è la versione più recente di UMDF e sostituisce UMDF 1. Tutti i nuovi driver UMDF devono essere scritti usando UMDF 2. Non vengono aggiunte nuove funzionalità 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'aggiornamento degli esempi di driver di Windows 11, versione 22H2 - maggio 2022.

Per altre informazioni, vedere Introduzione a UMDF.

Quando un'applicazione apre un handle a un dispositivo, il framework chiama il metodo IQueueCallbackCreate::OnCreateFile del driver e fornisce un puntatore all'interfaccia IWDFFile per l'oggetto file associato al dispositivo. Tutte le richieste di I/O inviate dall'applicazione all'handle aperto sono associate all'oggetto file creato. Quando arrivano tali richieste, il framework chiama il metodo appropriato da una delle interfacce degli oggetti coda UMDF fornite dal driver. Il driver può quindi chiamare IWDFIoRequest::GetFileObject per determinare l'oggetto file associato alla richiesta. Il driver può chiamare AssignContext sull'oggetto file per associare il contesto specifico della sessione di I/O.

La tabella seguente mostra le chiamate all'applicazione e le notifiche risultanti ricevute dal driver.

L'applicazione viene avviata I conducenti ricevono

Chiamata alla funzione CreateFile Di Microsoft Win32.

Chiamata al metodo IQueueCallbackCreate::OnCreateFile .

Chiamata alla funzione ReadFileEx Win32, WriteFileEx o DeviceIoControl .

Chiamata al metodo IQueueCallbackRead::OnRead, IQueueCallbackWrite::OnWrite o IQueueCallbackDeviceIoControl::OnDeviceIoControl.

Chiamata alla funzione CloseHandle Win32 per l'ultimo handle aperto all'oggetto file.

Una chiamata al metodo IFileCallbackCleanup::OnCleanupFile .

Il driver annulla o completa tutte le richieste di I/O associate all'oggetto file.

Dopo che il driver ritorna dalla notifica di pulizia, UMDF annulla tutte le richieste di I/O in sospeso.

Dopo che la pulizia è stata completata e UMDF ha annullato le richieste di I/O in sospeso, il driver riceve una chiamata al suo metodo IFileCallbackClose::OnCloseFile.

Un componente di sistema può emettere una richiesta di creazione per conto di un'app di Windows universale. Se il driver deve determinare l'ID processo dell'app che ha emesso la richiesta di creazione, può chiamare il metodo IWDFFile3::GetInitiatorProcessId .

Oggetti file creati dal driver

Se il driver deve creare e inviare una richiesta di I/O indipendentemente dall'applicazione al driver successivo nello stack (destinazione di I/O predefinita), il driver deve chiamare IWDFDevice::CreateWdfFile per recuperare un puntatore a un'interfaccia IWDFDriverCreatedFile . In questo caso, il driver successivo riceve le stesse notifiche ricevute dal driver quando l'applicazione genera la richiesta.

La tabella seguente mostra le chiamate effettuate dal driver e le notifiche risultanti al driver successivo nello stack.

Avvia il driver Il driver successivo nello stack riceve

Chiamata al metodo IWDFDevice::CreateWdfFile .

L'oggetto file creato da UMDF rappresenta una sessione di I/O tra il dispositivo e il dispositivo successivo nello stack.

Chiamata al metodo IQueueCallbackCreate::OnCreateFile .

Chiamata al metodo IWDFDevice::CreateRequest .

Chiamata per formattare la richiesta, ad esempio una chiamata al metodo IWDFIoTarget::FormatRequestForIoctl .

Chiamata al metodo IWDFIoRequest::Send .

Chiamata al metodo IQueueCallbackRead::OnRead, IQueueCallbackWrite::OnWrite o IQueueCallbackDeviceIoControl::OnDeviceIoControl.

Chiamata al metodo IWDFDriverCreatedFile::Close .

Una chiamata al metodo IFileCallbackCleanup::OnCleanupFile .

Il driver annulla o completa tutte le richieste di I/O associate all'oggetto file.

Dopo che il driver ritorna dalla notifica di pulizia, UMDF annulla tutte le richieste di I/O in sospeso.

Dopo che la pulizia è stata completata e UMDF ha annullato le richieste di I/O in sospeso, il driver riceve una chiamata al suo metodo IFileCallbackClose::OnCloseFile.

Per il dispositivo successivo nello stack, non esiste alcuna differenza tra l'oggetto file creato da un'applicazione e l'oggetto file creato da un dispositivo di livello superiore.