Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Gli oggetti coda framework rappresentano code di I/O, ovvero contenitori per le richieste di I/O ricevute da un driver. Ogni driver può creare una o più code di I/O per ogni dispositivo. L'oggetto coda del framework definisce un set di funzioni di callback degli eventi che il driver può fornire e un set di metodi oggetto che il driver può chiamare.
Quando il framework riceve una richiesta di I/O indirizzata a uno dei dispositivi del driver, il framework inserisce la richiesta nella coda di I/O appropriata. Se il driver registra uno o più gestori di richieste, il framework può inviare una notifica al driver ogni volta che è disponibile una richiesta di I/O. In alternativa, il driver può eseguire un'operazione di polling della coda di I/O per le richieste.
La maggior parte dei driver crea code di I/O nella loro funzione di callback EvtDriverDeviceAdd. Per creare una coda di I/O per un dispositivo, il driver chiama il metodo WdfIoQueueCreate dell'oggetto coda del framework che crea un oggetto coda del framework. Il driver fornisce una struttura WDF_IO_QUEUE_CONFIG al metodo . Questa struttura contiene informazioni di configurazione sulla coda, ad esempio il metodo di invio della coda e i puntatori ai gestori delle richieste che il framework chiama quando le richieste sono disponibili nella coda. La struttura indica anche se la coda sarà gestita dall'alimentazione e se il driver supporta buffer di lunghezza zero per le richieste di I/O della coda.
Se il driver imposta il membro DefaultQueue della struttura WDF_IO_QUEUE_CONFIG su TRUE, la coda diventa la coda di I/O predefinita del dispositivo. Se il driver crea una coda di I/O predefinita, il framework inserisce tutte le richieste di I/O del dispositivo in questa coda, a meno che non si creino code aggiuntive per ricevere alcune richieste. Un driver può ottenere un handle per la coda di I/O predefinita di un dispositivo chiamando il metodo WdfDeviceGetDefaultQueue .
Se si desidera usare più code di I/O per un dispositivo, il driver può chiamare WdfIoQueueCreate per creare tutti gli oggetti coda necessari. Se un driver crea più code, può chiamare WdfDeviceConfigureRequestDispatching, che indica al framework di indirizzare diversi tipi di richieste a code diverse. Ad esempio, è possibile specificare che tutte le richieste di lettura verranno recapitate a una coda e tutte le richieste di scrittura verranno recapitate a un'altra coda.
Se il driver crea un set di code di I/O e chiama WdfDeviceConfigureRequestDispatching per indirizzare ogni tipo di richiesta che il driver può ricevere a una coda specifica, il driver non richiede una coda predefinita.
Se un driver non fornisce una coda di I/O per le richieste di un particolare tipo e se il driver è un driver di funzione, il framework completa le richieste di quel tipo con un valore di stato di completamento di STATUS_INVALID_DEVICE_REQUEST. Se il driver è un driver di filtro e ha chiamato WdfFdoInitSetFilter, il framework inoltra automaticamente queste richieste al successivo driver più basso nello stack di driver. Pertanto, ad esempio, un driver di filtro che non elabora le richieste di lettura non deve fornire una coda di I/O che riceve le richieste di lettura.
Per esempi di come i driver possono usare code di I/O, vedere Esempi di utilizzo delle code di I/O.