Gestionnaires de demandes

Si votre pilote a spécifié la méthode de répartition séquentielle ou parallèle pour une file d’E/S, l’infrastructure appelle une fonction de rappel fournie par le pilote chaque fois qu’elle est prête à remettre l’une des demandes de la file d’attente au pilote.

Pour chaque file d’attente d’E/S, le pilote peut fournir une ou plusieurs des fonctions de rappel suivantes, appelées gestionnaires de requêtes :

EvtIoRead
L’infrastructure appelle la fonction de rappel EvtIoRead d’une file d’E/S lorsqu’une demande de lecture est disponible dans la file d’attente.

EvtIoWrite
L’infrastructure appelle la fonction de rappel EvtIoWrite d’une file d’attente d’E/S lorsqu’une demande d’écriture est disponible dans la file d’attente.

EvtIoDeviceControl
L’infrastructure appelle la fonction de rappel EvtIoDeviceControl d’une file d’E/S lorsqu’une demande de contrôle d’E/S d’appareil est disponible dans la file d’attente.

EvtIoInternalDeviceControl
L’infrastructure appelle la fonction de rappel EvtIoInternalDeviceControl d’une file d’attente d’E/S lorsqu’une demande de contrôle d’E/S d’appareil interne est disponible dans la file d’attente.

EvtIoDefault
L’infrastructure appelle la fonction de rappel EvtIoDefault d’une file d’attente d’E/S quand une demande est disponible, si le pilote n’a pas fourni la fonction de rappel spécifique au type de requête associée.

Le pilote inscrit des fonctions de rappel lorsqu’il appelle WdfIoQueueCreate pour créer une file d’E/S pour un appareil.

Chacune de ces fonctions de rappel reçoit deux arguments d’entrée : un handle pour la demande d’E/S que l’infrastructure remet au pilote et un handle pour la file d’attente d’E/S qui contenait la demande. Une fonction de rappel peut déterminer l’appareil cible en appelant WdfIoQueueGetDevice.

L’infrastructure appelle les gestionnaires de requêtes de votre pilote dans un contexte de thread arbitraire. Un pilote ne doit pas attendre une période prolongée lors de l’exécution dans un contexte de thread arbitraire. Dans certains cas, votre pilote peut utiliser des objets de répartiteur de noyau comme mécanismes de synchronisation. Pour plus d’informations sur le moment où votre pilote peut attendre des objets de répartiteur et sur ce qu’il doit faire quand il ne le peut pas, consultez Présentation des objets de répartiteur de noyau.