Funzione WdfIoQueueDrain (wdfio.h)
[Si applica a KMDF e UMDF]
Il metodo WdfIoQueueDrain fa sì che il framework arresti l'accodamento delle richieste di I/O a una coda di I/O, consentendo al contempo il recapito e l'elaborazione delle richieste già in coda.
Sintassi
void WdfIoQueueDrain(
[in] WDFQUEUE Queue,
[in, optional] PFN_WDF_IO_QUEUE_STATE DrainComplete,
[in, optional] WDFCONTEXT Context
);
Parametri
[in] Queue
Handle per un oggetto coda del framework.
[in, optional] DrainComplete
Puntatore a una funzione di callback EvtIoQueueState fornita dal driver. Questo parametro è facoltativo e può essere NULL.
[in, optional] Context
Puntatore non tipizzato alle informazioni sul contesto fornite dal driver che il framework passa alla funzione di callback EvtIoQueueState . Questo parametro è facoltativo e può essere NULL.
Valore restituito
nessuno
Osservazioni
Se il driver fornisce un handle di oggetto non valido, si verifica un controllo di bug.
Dopo che un driver chiama WdfIoQueueDrain, il framework interrompe l'aggiunta di richieste di I/O alla coda specificata. Se il framework riceve richieste aggiuntive per la coda, le completa con un valore di stato di completamento pari a STATUS_INVALID_DEVICE_STATE.
Se il driver fornisce una funzione di callback EvtIoQueueState , il framework lo chiama dopo il completamento o l'annullamento di tutte le richieste recapitate al driver. È possibile modificare IRQL in corrispondenza del quale viene eseguito il callback specificando ExecutionLevel in WDF_OBJECT_ATTRIBUTES in fase di creazione della coda. Per altre info, vedi la sezione Osservazioni diEVT_WDF_IO_QUEUE_STATE.
Il driver non deve chiamare un altro metodo che modifica lo stato della coda, ad esempio WdfIoQueuePurge o WdfIoQueueStart, prima che il framework abbia chiamato EvtIoQueueState.
Se un driver specifica NULL per DrainComplete, il driver può chiamare un'altra operazione di modifica dello stato prima del completamento delle richieste.
Come procedura consigliata, è consigliabile chiamare WdfIoQueueDrain solo quando si è certi che le richieste di I/O in sospeso della coda verranno completate in modo tempestivo. In caso contrario, usare WdfIoQueuePurge. Per altre informazioni, vedere Gestione delle code di I/O.
Dopo che un driver ha svuotato una coda di I/O, può riavviare la coda chiamando WdfIoQueueStart.
Esempio
L'esempio di codice seguente svuota una coda di I/O e chiama la funzione EvtIoQueueDrainComplete di un driver quando tutte le richieste recapitate al driver sono state completate o annullate.
WdfIoQueueDrain(
Queue,
EvtIoQueueDrainComplete,
(WDFCONTEXT) myQueueContext
);
Requisiti
Requisito | Valore |
---|---|
Piattaforma di destinazione | Universale |
Versione KMDF minima | 1.0 |
Versione UMDF minima | 2,0 |
Intestazione | wdfio.h (include Wdf.h) |
Libreria | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
IRQL | <= DISPATCH_LEVEL |
Regole di conformità DDI | ChangeQueueState(kmdf), DriverCreate(kmdf), EvtSurpriseRemoveNoSuspendQueue(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), NoCancelFromEvtSurpriseRemove(kmdf) |