Partager via


WdfIoQueuePurge, fonction (wdfio.h)

[S’applique à KMDF et UMDF]

La méthode WdfIoQueuePurge entraîne l’arrêt de la mise en file d’attente des demandes d’E/S dans une file d’attente d’E/S et l’annulation des demandes non traitées.

Syntaxe

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

Paramètres

[in] Queue

Handle d’un objet de file d’attente d’infrastructure.

[in, optional] PurgeComplete

Pointeur vers une fonction de rappel EvtIoQueueState fournie par le pilote. Ce paramètre est facultatif et peut être NULL.

[in, optional] Context

Pointeur non typé vers les informations de contexte fournies par le pilote que l’infrastructure transmet à la fonction de rappel EvtIoQueueState . Ce paramètre est facultatif et peut être NULL.

Valeur de retour

None

Remarques

Un bogue case activée se produit si le pilote fournit un handle d’objet non valide.

Après qu’un pilote a appelé WdfIoQueuePurge, l’infrastructure cesse d’ajouter des demandes d’E/S à la file d’attente spécifiée. L’infrastructure annule toutes les requêtes qu’elle n’a pas remises à l’appareil cible et appelle la fonction de rappel CompletionRoutine du pilote pour chacune d’elles. L’infrastructure tente également d’annuler (en appelant IoCancelIrp) toutes les requêtes envoyées à l’appareil cible qui n’ont pas été marquées WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE.

Si l’infrastructure reçoit des demandes supplémentaires pour la file d’attente, elle les termine avec une valeur d’achèvement status de STATUS_INVALID_DEVICE_STATE.

Si le pilote fournit une fonction de rappel EvtIoQueueState , l’infrastructure l’appelle une fois que toutes les demandes remises au pilote ont été terminées ou annulées. Vous pouvez modifier l’IRQL auquel le rappel s’exécute en spécifiant ExecutionLevel dans WDF_OBJECT_ATTRIBUTES au moment de la création de la file d’attente . Pour plus d’informations, consultez la section Remarques deEVT_WDF_IO_QUEUE_STATE.

Une fois qu’un pilote a vidé une file d’E/S, il peut redémarrer la file d’attente en appelant WdfIoQueueStart.

Si le pilote appelle WdfRequestRequeue après avoir appelé WdfIoQueuePurge, la tentative de mise en file d’attente peut réussir avant la fin de la purge. Dans les versions 1.9 et antérieures de KMDF, cette séquence provoque le blocage du système d’exploitation. Ce problème est résolu dans KMDF version 1.11 et ultérieure.

Pour plus d’informations sur la méthode WdfIoQueuePurge , consultez Gestion des files d’attente d’E/S.

Exemples

L’exemple de code suivant vide une file d’E/S et n’appelle pas de fonction de rappel lorsque toutes les demandes remises au pilote ont été terminées ou annulées.

WdfIoQueuePurge(
                ReadQueue, 
                WDF_NO_EVENT_CALLBACK, 
                WDF_NO_CONTEXT 
                );

Configuration requise

Condition requise Valeur
Plateforme cible Universal
Version KMDF minimale 1.0
Version UMDF minimale 2.0
En-tête wdfio.h (inclure Wdf.h)
Bibliothèque Wdf01000.sys (KMDF) ; WUDFx02000.dll (UMDF)
IRQL <= DISPATCH_LEVEL
Règles de conformité DDI ChangeQueueState(kmdf), DriverCreate(kmdf), EvtSurpriseRemoveNoSuspendQueue(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), NoCancelFromEvtSurpriseRemove(kmdf)

Voir aussi

EvtIoQueueState

WdfIoQueueDrain

WdfIoQueuePurgeSynchronously