Partager via


WdfIoQueueDrain, fonction (wdfio.h)

[S’applique à KMDF et UMDF]

La méthode WdfIoQueueDrain 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, tout en autorisant la remise et le traitement des demandes déjà en file d’attente.

Syntaxe

void WdfIoQueueDrain(
  [in]           WDFQUEUE               Queue,
  [in, optional] PFN_WDF_IO_QUEUE_STATE DrainComplete,
  [in, optional] WDFCONTEXT             Context
);

Paramètres

[in] Queue

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

[in, optional] DrainComplete

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 le framework 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é WdfIoQueueDrain, l’infrastructure cesse d’ajouter des demandes d’E/S à la file d’attente spécifiée. 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.

Le pilote ne doit pas appeler une autre méthode qui change l’état de file d’attente, telle que WdfIoQueuePurge ou WdfIoQueueStart, avant que l’infrastructure ait appelé EvtIoQueueState.

Si un pilote spécifie NULL pour DrainComplete, il peut appeler une autre opération de changement d’état avant que les demandes soient terminées.

Il est recommandé d’appeler WdfIoQueueDrain uniquement lorsque vous êtes certain que les demandes d’E/S en attente de la file d’attente se termineront en temps opportun. Sinon, utilisez WdfIoQueuePurge. Pour plus d’informations, consultez Gestion des files d’attente d’E/S.

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

Exemples

L’exemple de code suivant draine une file d’attente d’E/S et appelle la fonction EvtIoQueueDrainComplete d’un pilote lorsque toutes les demandes remises au pilote ont été terminées ou annulées.

WdfIoQueueDrain(
                Queue,
                EvtIoQueueDrainComplete,
                (WDFCONTEXT) myQueueContext
                );

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

WdfIoQueueDrainSynchronously

WdfIoQueuePurge