Condividi tramite


Driver-Created rispetto agli oggetti file Application-Created

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.

Quando un'applicazione apre un handle a un dispositivo, il framework chiama il metodo IQueueCallbackCreate::OnCreateFile 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 tali richieste arrivano, il framework chiama il metodo appropriato da una delle interfacce oggetto code UMDF fornite dal driver. Il driver può quindi chiamare IWDFIoRequest::GetFileObject per determinare l'oggetto file associato alla richiesta. Il driver può chiamare AssignContext nell'oggetto file per associare il contesto specifico alla sessione di I/O.

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

L'applicazione avvia Il driver riceve

Chiamata alla funzione CreateFile di Microsoft Win32.

Una chiamata al relativo metodo IQueueCallbackCreate::OnCreateFile .

Chiamata alla funzione Win32 ReadFileEx, WriteFileEx o DeviceIoControl .

Una chiamata al relativo 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 aver restituito il driver dalla notifica di pulizia, UMDF annulla le richieste di I/O in sospeso.

Dopo aver completato la pulizia e UMDF annulla le richieste di I/O in sospeso, il driver riceve una chiamata al relativo metodo IFileCallbackClose::OnCloseFile .

Un componente di sistema può generare una richiesta di creazione per conto di un'app di Windows universale. Se il driver deve determinare l'ID processo dell'app che ha rilasciato 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 indipendente dall'applicazione al driver successivo nello stack (destinazione 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.

Il driver avvia 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.

Una chiamata al relativo metodo IQueueCallbackCreate::OnCreateFile .

Chiamata al metodo IWDFDevice::CreateRequest .

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

Chiamata al metodo IWDFIoRequest::Send .

Una chiamata al relativo 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 aver restituito il driver dalla notifica di pulizia, UMDF annulla le richieste di I/O in sospeso.

Dopo aver completato la pulizia e UMDF annulla le richieste di I/O in sospeso, il driver riceve una chiamata al relativo 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.