Controllo dello stato di una destinazione di I/O generale

È possibile visualizzare gli oggetti di destinazione di I/O con due cancelli: un controllo in ingresso e un out-gate. Il controllo out-gate quando il framework invia una richiesta all'oggetto dispositivo di destinazione, mentre i controlli in-gate quando una richiesta è autorizzata a immettere la destinazione di I/O.

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

Iniziato
Entrambe le porte dell'oggetto di destinazione di I/O sono aperte. Il driver può inviare richieste di I/O alla coda di destinazione di I/O e il framework invia le richieste al driver appropriato.

Fermato
Il controllo interno della destinazione di I/O è aperto, ma il out-gate è chiuso. Il framework interrompe il recapito delle richieste al driver appropriato. Per inviare richieste di I/O alla destinazione di I/O, il driver deve impostare WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE o WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET nella struttura WDF_REQUEST_SEND_OPTIONS di ogni richiesta.

Eliminati
Entrambe le porte dell'oggetto di destinazione di I/O vengono chiuse. Il driver non può inviare richieste di I/O alla destinazione di I/O a meno che non imposti WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE o WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET. Inoltre, il framework annulla le richieste non elaborate nella coda interna dell'oggetto di destinazione I/O. Questo stato è disponibile a partire da KMDF versione 1.11.

Chiuso per Query-Remove
Una destinazione di I/O remota 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. Il driver può chiamare WdfIoTargetGetState per ottenere lo stato di una destinazione di I/O.

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 WdfIoTargetStop per arrestare temporaneamente una destinazione di I/O locale e chiamare WdfIoTargetStart 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.

In KMDF versione 1.11 e successive, il driver può chiamare WdfIoTargetPurge per impedire temporaneamente l'invio delle richieste di I/O a una destinazione di I/O locale e l'annullamento delle richieste non elaborate nella coda della destinazione. Ad esempio, come parte della pulizia dell'handle di file, un driver potrebbe eliminare una destinazione di I/O locale per assicurarsi che tutte le richieste inviate al driver vengano annullate.

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 risparmio energia e PnP.

Stati di destinazione I/O remoti

I driver devono chiamare WdfIoTargetOpen 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 WdfIoTargetStop per arrestare temporaneamente una destinazione di I/O remota e chiamare WdfIoTargetStart per riavviarlo.

In KMDF versione 1.11 e successive, il driver può chiamare WdfIoTargetPurge per impedire temporaneamente l'invio delle richieste di I/O a una destinazione di I/O remota e per annullare le richieste non elaborate nella coda della destinazione.

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:

EvtIoTargetQueryRemove
Informa il driver che potrebbe essere rimosso un dispositivo di destinazione di I/O remoto. Il driver deve chiamare WdfIoTargetCloseForQueryRemove se si vuole che il driver consenta la rimozione del dispositivo.

EvtIoTargetRemoveComplete
Informa il driver che un dispositivo di destinazione di I/O remoto è stato rimosso. Questa funzione di callback deve chiamare WdfIoTargetClose.

EvtIoTargetRemoveCanceled
Informa il driver che un tentativo di rimuovere un dispositivo di destinazione di I/O remoto è stato annullato. Questa funzione di callback deve chiamare WdfIoTargetOpen e il driver chiama in genere WDF_IO_TARGET_OPEN_PARAMS_INIT_REOPEN per inizializzare la funzione WDF_IO_TARGET_OPEN_PARAMS_INIT.

Se un driver ha terminato di usare una destinazione di I/O remota e non userà di nuovo la destinazione e la destinazione non dispone di oggetti richiesta figlio ancora in sospeso, il driver può chiamare WdfObjectDelete senza prima chiamare WdfIoTargetClose. Se nella destinazione sono presenti oggetti richiesta figlio ancora in sospeso, il driver deve chiamare WdfIoTargetClose prima di poter chiamare in modo sicuro WdfObjectDelete.