Controllo dello stato di una destinazione di I/O generale in 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. 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 info, vedi Introduzione con UMDF.

Il framework definisce gli stati seguenti per le destinazioni di I/O generali:

Iniziato
La destinazione di I/O è aperta ,ovvero disponibile per il driver UMDF, e il driver può inviare richieste di I/O. Il framework invia le richieste al driver appropriato.

Fermato
La destinazione di I/O è aperta, ma il driver UMDF non può inviare richieste di I/O alla destinazione di I/O a meno che il driver non passi il flag WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE al parametro Flags in una chiamata al metodo IWDFIoRequest::Send .

Il framework interrompe il recapito delle richieste al driver appropriato.

Chiuso per Query-Remove
La destinazione di I/O viene temporaneamente chiusa perché il dispositivo potrebbe essere presto rimosso.

Chiuso
La destinazione di I/O è chiusa e non può essere avviata o arrestata.

Eliminato
Il dispositivo di destinazione di I/O è stato rimosso.

L'enumerazione WDF_IO_TARGET_STATE definisce i valori che rappresentano questi stati.

Stati di destinazione I/O locali

Il framework si apre automaticamente e avvia le destinazioni di I/O locali.

Se necessario, il driver può chiamare IWDFIoTargetStateManagement::Stop per arrestare temporaneamente una destinazione di I/O locale e chiamare IWDFIoTargetStateManagement::Start per riavviarlo. Ad esempio, il driver potrebbe arrestare una destinazione di I/O locale se rileva una condizione di errore temporanea e quindi riavviare la destinazione di I/O se la condizione di errore viene corretta.

Se un dispositivo di destinazione di I/O locale viene rimosso, il framework si arresta e chiude automaticamente la destinazione di I/O e annulla tutte le richieste di I/O presenti nella coda della destinazione. Il framework notifica al driver che il dispositivo non è più disponibile chiamando le funzioni di callback degli eventi dell'oggetto dispositivo. Per altre informazioni su queste funzioni di callback, vedere Scenari di PnP e risparmio energia in UMDF.

I driver possono chiamare IWDFIoTargetStateManagement::GetState per ottenere lo stato corrente di una destinazione di I/O locale.

Stati di destinazione I/O remoti

I driver devono chiamare IWDFRemoteTarget::OpenFileByName o IWDFRemoteTarget::OpenRemoteInterface per aprire destinazioni di I/O remote. Quando un driver apre una destinazione di I/O remota, il framework avvia automaticamente la destinazione di I/O.

Se necessario, il driver può chiamare IWDFRemoteTarget::Stop per arrestare temporaneamente una destinazione di I/O remota e chiamare IWDFRemoteTarget::Start per riavviarlo.

Se un dispositivo di destinazione di I/O remoto viene rimosso, il framework si arresta e chiude automaticamente la destinazione di I/O e annulla tutte le richieste di I/O presenti nella coda della destinazione, a meno che il driver non registri le funzioni di callback degli eventi seguenti:

IRemoteTargetCallbackRemoval::OnRemoteTargetQueryRemove
Informa il driver che potrebbe essere rimosso un dispositivo di destinazione di I/O remoto. Il driver deve chiamare IWDFRemoteTarget::CloseForQueryRemove se si vuole che il driver consenta la rimozione del dispositivo.

IRemoteTargetCallbackRemoval::OnRemoteTargetRemoveComplete
Informa il driver che un dispositivo di destinazione di I/O remoto è stato rimosso. Questa funzione di callback deve chiamare IWDFRemoteTarget::Close.

IRemoteTargetCallbackRemoval::OnRemoteTargetRemoveCanceled
Informa il driver che un tentativo di rimuovere un dispositivo di destinazione di I/O remoto è stato annullato. Se si vuole che il driver continui a usare la destinazione, il driver deve chiamare IWDFRemoteTarget::Reopen. In genere, un driver chiama Reopen dall'interno della funzione di callback OnRemoteTargetRemoveCanceled , ma Reopen può invece essere chiamato dopo la restituzione di OnRemoteTargetRemoveCanceled .

I driver possono chiamare IWDFRemoteTarget::GetState per ottenere lo stato corrente di una destinazione di I/O remota.