Funzione WdfIoQueueDrainSynchronously (wdfio.h)
[Si applica a KMDF e UMDF]
Il metodo WdfIoQueueDrainSynchronously fa sì che il framework arresti l'accodamento delle richieste di I/O a una coda di I/O, consentendo al tempo stesso il recapito e l'elaborazione delle richieste già in coda. Il metodo restituisce dopo il completamento o l'annullamento di tutte le richieste.
Sintassi
void WdfIoQueueDrainSynchronously(
[in] WDFQUEUE Queue
);
Parametri
[in] Queue
Handle per un oggetto coda del framework.
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 WdfIoQueueDrainSynchronously, 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.
Il driver non deve chiamare un altro metodo che modifica lo stato della coda, ad esempio WdfIoQueuePurge o WdfIoQueueStart, prima che venga restituita la chiamata a WdfIoQueueDrainSynchronously .
Come procedura consigliata, è consigliabile chiamare WdfIoQueueDrainSynchronously quando si è certi che le richieste di I/O in sospeso della coda verranno completate in modo tempestivo. In caso contrario, usare WdfIoQueuePurgeSynchronously. 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.
Non chiamare WdfIoQueueDrainSynchronously dalle funzioni di callback dell'evento dell'oggetto coda seguenti, indipendentemente dalla coda a cui è associata la funzione di callback dell'evento:
EvtIoDefaultEvtIoDeviceControlEvtIoInternalDeviceControlEvtIoReadEvtIoWrite
Esempio
Nell'esempio di codice seguente viene svuotata una coda di I/O.
WdfIoQueueDrainSynchronously(queue);
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 | PASSIVE_LEVEL |
Regole di conformità DDI | ChangeQueueState(kmdf), DriverCreate(kmdf), EvtSurpriseRemoveNoSuspendQueue(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), NoCancelFromEvtSurpriseRemove(kmdf) |