Condividi tramite


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)

Vedi anche

EvtIoQueueState

WdfIoQueueDrainSynchronously

WdfIoQueuePurge