Envoi de demandes d’E/S de manière asynchrone

Avant de pouvoir envoyer une demande d’E/S de manière asynchrone à une cible d’E/S, vous devez la mettre en forme. Le tableau suivant répertorie les méthodes d’objet cible d’E/S que votre pilote peut appeler pour mettre en forme les demandes d’E/S.

Méthode Objectif

WdfIoTargetFormatRequestForRead

Mettre en forme une demande de lecture

WdfIoTargetFormatRequestForWrite

Mettre en forme une demande d’écriture

WdfIoTargetFormatRequestForIoctl

Met en forme une demande de contrôle d’appareil

WdfIoTargetFormatRequestForInternalIoctl

Met en forme une demande de contrôle d’appareil interne

WdfIoTargetFormatRequestForInternalIoctlOthers

Met en forme une demande de contrôle d’appareil interne non standard

Pour envoyer une demande d’E/S de manière asynchrone, votre pilote doit :

  1. Mettez en forme la demande.

    Utilisez l’une des méthodes répertoriées dans le tableau précédent pour mettre en forme vos demandes. Pour plus d’informations sur l’utilisation de ces méthodes, consultez les pages de référence des méthodes.

  2. Inscrire une fonction de rappel CompletionRoutine .

    Si vous envoyez des demandes de manière asynchrone, vous souhaitez généralement que l’infrastructure notifie votre pilote lorsqu’un autre pilote termine chaque requête. Votre pilote doit définir une fonction de rappel CompletionRoutine et l’inscrire en appelant WdfRequestSetCompletionRoutine. Pour plus d’informations, consultez Terminer les demandes d’E/S.

  3. Envoyez la demande.

    Une fois que votre pilote a mis en forme la demande et inscrit une fonction de rappel CompletionRoutine , votre pilote doit appeler WdfRequestSend. Cette méthode vous permet d’envoyer des requêtes de manière synchrone ou asynchrone, en fonction des indicateurs définis dans le paramètre RequestOptions . Pour un moyen plus simple d’envoyer des demandes d’E/S de manière synchrone, consultez Envoi de demandes d’E/S de manière synchrone. Pour plus d’informations sur la façon d’obtenir l’status d’achèvement pour une demande asynchrone ou pour toute requête envoyée en appelant WdfRequestSend, consultez Achèvement des demandes d’E/S.

Un pilote qui appelle WdfRequestSend pour envoyer une demande d’E/S peut tenter d’annuler la demande ultérieurement. Pour plus d’informations, consultez Annulation des demandes d’E/S.

Certains pilotes peuvent envoyer une seule demande d’E/S à plusieurs appareils, et donc à plusieurs cibles d’E/S, en appelant WdfRequestSend plusieurs fois pour chaque requête. Ces pilotes doivent appeler WdfRequestChangeTarget avant chaque appel à WdfRequestSend après le premier pour vérifier que la requête peut être envoyée à la cible d’E/S suivante.