Partager via


Problèmes 64 bits du modèle de pilote d’affichage Windows (WDDM)

Pour permettre aux applications 32 bits de s’exécuter sur un système d’exploitation 64 bits, un pilote d’affichage en mode utilisateur 32 bits doit être fourni en plus du pilote d’affichage en mode utilisateur 64 bits requis par les applications 64 bits. Toutefois, seule la version 64 bits d’un pilote miniport d’affichage est requise sur un système d’exploitation 64 bits. Windows sur Windows (WOW64) permet aux applications 32 bits de s’exécuter sur un système d’exploitation 64 bits. Pour plus d’informations, consultez Prise en charge des E/S 32 bits dans votre pilote 64 bits.

Pour installer un pilote d’affichage en mode utilisateur 32 bits sur un système d’exploitation 64 bits, l’entrée suivante doit être définie dans une section de registre supplémentaire du fichier INF pour le pilote miniport d’affichage du périphérique graphique. Cela doit se produire pour que le nom de dll du pilote d’affichage en mode utilisateur 32 bits soit ajouté au Registre lors de l’installation du pilote :

 [Xxx_SoftwareDeviceSettings]
...
 HKR,, UserModeDriverNameWow, %REG_MULTI_SZ%, Xxx.dll
...

Le fichier INF doit contenir des informations pour que le système d’exploitation copie le pilote d’affichage en mode utilisateur 32 bits dans le répertoire %systemroot%\SysWOW64 du système. Pour plus d’informations, consultez La directive INF CopyFiles et la section INF DestinationDirs.

Étant donné que WOW64 ne peut pas traiter des structures de données opaques ou non typées telles que la structure D3DDDICB_ALLOCATE passée via la fonction pfnAllocateCb , il ne peut pas effectuer une conversion automatique de 32 bits en 64 bits. Par conséquent, pour que WOW64 fonctionne correctement, vous devez prendre en compte les éléments suivants lors de l’écriture d’un pilote d’affichage en mode utilisateur 32 bits à exécuter sur un système d’exploitation 64 bits :

  • Évitez les pointeurs ou les types de données sensibles à plusieurs systèmes d’exploitation, tels que SIZE_T ou HANDLE. En plus de rendre la taille de la structure entière variable, ces types de données de largeur variable rendent l’alignement et la position des membres individuels différents. Si les membres de largeur variable sont inévitables, vous pouvez ajouter un autre membre pour indiquer que la structure de données provient d’un pilote d’affichage en mode utilisateur 32 bits. Le pilote miniport d’affichage 64 bits peut ensuite effectuer correctement la conversion.

  • Même si des membres de largeur variable ne sont pas présents, vous devrez peut-être prendre en compte les exigences d’alignement spécifiques à l’architecture. Par instance, sur x64, un UINT64 (ou QWORD) doit être aligné sur 8 octets. Étant donné qu’un pilote d’affichage en mode utilisateur 32 bits compilé par un compilateur 32 bits standard peut ne pas aligner correctement ces types natifs 64 bits, le pilote miniport d’affichage 64 bits peut ne pas être en mesure d’accéder avec précision aux données du pilote d’affichage en mode utilisateur 32 bits. Toutefois, vous pouvez forcer l’alignement à l’aide des directives du compilateur pragma appropriées. Bien que l’utilisation de directives du compilateur pragma puisse entraîner une légère perte d’espace sur les systèmes d’exploitation 32 bits, cela vous permet d’utiliser des pilotes d’affichage identiques en mode utilisateur 32 bits sur les systèmes d’exploitation 32 bits et 64 bits. Si vous ne pouvez pas forcer l’alignement à l’aide des directives du compilateur pragma appropriées, le pilote d’affichage en mode utilisateur 32 bits qui s’exécute à l’aide de WOW64 sur un système d’exploitation 64 bits doit être différent du pilote d’affichage en mode utilisateur 32 bits exécuté sur un système d’exploitation 32 bits.