Envoi de demandes d’E/S à des cibles d’E/S générales
Votre pilote peut envoyer des demandes d’E/S à des cibles d’E/S générales de manière synchrone ou asynchrone.
Si un pilote envoie des demandes d’E/S de manière synchrone, un thread de pilote envoie les requêtes une par une. Le thread attend que chaque requête se termine avant d’envoyer la suivante. Ce processus est plus simple que d’envoyer les demandes d’E/S de manière asynchrone. Votre pilote peut envoyer des demandes d’E/S de manière synchrone s’il n’envoie pas beaucoup de demandes et si les performances du système ou des appareils ne sont pas réduites pendant que votre pilote attend chaque demande d’E/S.
Si un pilote envoie des demandes d’E/S de manière asynchrone, un thread de pilote envoie chaque requête dès que la demande est prête à être envoyée, sans attendre la fin des requêtes précédemment envoyées. Si votre pilote doit gérer de nombreuses demandes d’E/S dans de courtes périodes, vous ne pouvez probablement pas autoriser votre pilote à attendre que chaque requête se termine avant d’envoyer la requête suivante. Sinon, vous risquez de perdre des données ou de réduire les performances des appareils de votre pilote et, éventuellement, de l’ensemble du système.
L’objet cible d’E/S de l’infrastructure fournit deux ensembles de méthodes que votre pilote peut appeler : l’un pour envoyer des demandes d’E/S de manière synchrone et l’autre pour envoyer des demandes d’E/S de manière asynchrone.
Pour chacune de ces méthodes, vous devez fournir un objet de requête et un espace de mémoire tampon. Vous pouvez utiliser ces méthodes pour transférer une requête que votre pilote a reçue dans l’une de ses files d’attente d’E/S ou pour créer et envoyer une nouvelle demande.