Méthodes d’accès aux mémoires tampons de données
L’une des principales responsabilités des piles de pilotes est le transfert de données entre les applications en mode utilisateur et les appareils d’un système. Le système d’exploitation fournit les trois méthodes suivantes pour accéder aux mémoires tampons de données :
E/S mises en mémoire tampon
Le système d’exploitation crée une mémoire tampon système non pagée, de taille égale à la mémoire tampon de l’application. Pour les opérations d’écriture, le gestionnaire d’E/S copie les données utilisateur dans la mémoire tampon système avant d’appeler la pile des pilotes. Pour les opérations de lecture, le gestionnaire d’E/S copie les données de la mémoire tampon système dans la mémoire tampon de l’application une fois que la pile de pilotes a terminé l’opération demandée.
Pour plus d’informations, consultez Utilisation des E/S mises en mémoire tampon.
E/S directes
Le système d’exploitation verrouille la mémoire tampon de l’application. Il crée ensuite une liste de descripteurs de mémoire (MDL) qui identifie les pages de mémoire verrouillées et transmet le MDL à la pile de pilotes. Les pilotes accèdent aux pages verrouillées via mdl.
Pour plus d’informations, consultez Utilisation d’E/S directes.
Ni mise en mémoire tampon ni E/S directes
Le système d’exploitation transmet l’adresse et la taille de départ virtuelles de la mémoire tampon d’application à la pile de pilotes. La mémoire tampon est accessible uniquement à partir des pilotes qui s’exécutent dans le contexte de thread de l’application.
Pour plus d’informations, consultez Utilisation des E/S directes ou mises en mémoire tampon.
Pour les requêtes IRP_MJ_READ et IRP_MJ_WRITE , les pilotes spécifient la méthode d’E/S à l’aide d’indicateurs dans chaque structure DEVICE_OBJECT . Pour plus d’informations, consultez Initialisation d’un objet Device.
Pour les requêtes IRP_MJ_DEVICE_CONTROL et IRP_MJ_INTERNAL_DEVICE_CONTROL , la méthode d’E/S est déterminée par la valeur TransferType contenue dans chaque valeur IOCTL. Pour plus d’informations, consultez Définition de codes de contrôle d’E/S.
Tous les pilotes d’une pile de pilotes doivent utiliser la même méthode d’accès à la mémoire tampon pour chaque requête, sauf éventuellement pour le pilote de niveau supérieur (qui peut utiliser la méthode « ni l’un ni l’autre », quelle que soit la méthode utilisée par les pilotes inférieurs).