Prise en charge des E/S 32 bits dans votre pilote 64 bits
Windows sur Windows (WOW64) permet aux applications en mode utilisateur Microsoft Win32 de s’exécuter sur Windows 64 bits. Pour ce faire, il intercepte les appels de fonction Win32 et convertit les paramètres des types de pointeurs 32 bits en types de pointeurs 64 bits, le cas échéant, avant d’effectuer la transition vers le noyau 64 bits. Cette conversion, appelée thunking, est effectuée automatiquement pour toutes les fonctions Win32, à une exception importante : les mémoires tampons de données passées à DeviceIoControl. Le contenu de ces mémoires tampons, qui sont pointées par les paramètres InputBuffer et OutputBuffer , n’est pas mal vu, car leur structure est spécifique au pilote.
Note Bien que le contenu de la mémoire tampon ne soit pas entêté, les pointeurs de mémoire tampon sont convertis en pointeurs 64 bits.
Les applications en mode utilisateur appellent DeviceIoControl pour envoyer une demande d’E/S directement à un pilote en mode noyau spécifié. Cette demande contient un code de contrôle d’E/S (IOCTL) ou un code de contrôle du système de fichiers (FSCTL) et des pointeurs vers les mémoires tampons de données d’entrée et de sortie. Le format de ces mémoires tampons de données est spécifique à IOCTL ou FSCTL, qui à son tour est défini par le pilote en mode noyau. Étant donné que le format de mémoire tampon est arbitraire et qu’il est connu du pilote et non de WOW64, la tâche de manipulation des données est laissée au pilote.
Votre pilote 64 bits doit prendre en charge les E/S 32 bits si toutes les conditions suivantes sont remplies :
Le pilote expose un IOCTL (ou FSCTL) aux applications en mode utilisateur.
Au moins l’une des mémoires tampons d’E/S utilisées par le IOCTL contient des types de données de précision de pointeur.
Votre code IOCTL ne peut pas être facilement réécrit pour éliminer l’utilisation de types de données de mémoire tampon de précision de pointeur.