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