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) |