Partager via


Méthodes d’accès aux mémoires tampons de données

L’une des principales responsabilités des piles de pilotes consiste à transférer des 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 paginée, de taille égale à celle de 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 de 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 la pile de pilotes terminée l’opération demandée.

Pour plus d’informations, consultez Utilisation des E/S mises en mémoire tampon.

Direct I/O
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 des 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 des pilotes. La mémoire tampon est accessible uniquement à partir de pilotes qui s’exécutent dans le contexte de thread de l’application.

Pour plus d’informations, consultez Utilisation d’E/S sans mémoire tampon ni d’E/S directes.

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 d’appareil.

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 des 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 », quelle que soit la méthode utilisée par les pilotes inférieurs).