Funzione WdfIoQueuePurge (wdfio.h)

[Si applica a KMDF e UMDF]

Il metodo WdfIoQueuePurge causa l'arresto dell'accodamento delle richieste di I/O a una coda di I/O e l'annullamento delle richieste non elaborate.

Sintassi

void WdfIoQueuePurge(
  [in]           WDFQUEUE               Queue,
  [in, optional] PFN_WDF_IO_QUEUE_STATE PurgeComplete,
  [in, optional] WDFCONTEXT             Context
);

Parametri

[in] Queue

Handle a un oggetto code del framework.

[in, optional] PurgeComplete

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 di contesto fornite dal driver che il framework passa alla funzione di callback EvtIoQueueState . Questo parametro è facoltativo e può essere NULL.

Valore restituito

nessuno

Osservazioni

Un controllo di bug si verifica se il driver fornisce un handle di oggetti non valido.

Dopo che un driver chiama WdfIoQueuePurge, il framework smette di aggiungere richieste di I/O alla coda specificata. Il framework annulla tutte le richieste che non è stato recapitato al dispositivo di destinazione e chiama la funzione di callback completamento del driver per ogni. Il framework tenta inoltre di annullare (chiamando IoCancelIrp) eventuali richieste recapitate al dispositivo di destinazione che non sono state contrassegnate WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE.

Se il framework riceve richieste aggiuntive per la coda, le completa con un valore di stato di completamento di STATUS_INVALID_DEVICE_STATE.

Se il driver fornisce una funzione di callback EvtIoQueueState , il framework lo chiama dopo che tutte le richieste recapitate al driver sono state completate o annullate. È 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 informazioni, vedere la sezione Osservazioni diEVT_WDF_IO_QUEUE_STATE.

Dopo aver eliminato una coda di I/O, un driver può riavviare la coda chiamando WdfIoQueueStart.

Se il driver chiama WdfRequestRequeue dopo aver chiamato WdfIoQueuePurge, il tentativo di ripetizione potrebbe avere esito positivo prima del completamento dell'eliminazione. Nelle versioni 1.9 e precedenti di KMDF, questa sequenza causa l'arresto anomalo del sistema operativo. Questo problema è stato risolto in KMDF versione 1.11 e successiva.

Per altre informazioni sul metodo WdfIoQueuePurge , vedere Gestione delle code di I/O.

Esempio

L'esempio di codice seguente elimina una coda di I/O e non chiama una funzione di callback quando tutte le richieste recapitate al driver sono state completate o annullate.

WdfIoQueuePurge(
                ReadQueue, 
                WDF_NO_EVENT_CALLBACK, 
                WDF_NO_CONTEXT 
                );

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
Versione KMDF minima 1.0
Versione UMDF minima 2,0
Intestazione wdfio.h (includere 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

WdfIoQueueDrain

WdfIoQueuePurgeSynchronously