La vie secrète de WindowsLes icônes 16 bits sont vraiment démodées

Raymond Chen

Comme je l'ai observé dans la chronique La vie secrète de Windows de février 2008, certaines fonctionnalités disparaissent bel et bien de Windows®. Cela se produit généralement lentement et imperceptiblement, tandis qu'une équipe produit fête silencieusement cet événement chaque fois qu'il survient. La capacité du code 32 bits à accéder à des icônes enregistrées dans des modules 16 bits, principalement des fichiers exécutables et des DLL 16 bits, est une autre fonctionnalité ayant disparu dans Windows Vista®.

Avant de vous révolter, n'oubliez pas que le code 16 bits peut toujours accéder aux icônes enregistrées dans les modules 16 bits ; cela se produit dans la couche d'émulation 16 bits. Ce qui a disparu, c'est la possibilité d'accéder à ces icônes à partir de code 32 bits, ou plus spécifiquement la capacité des fonctions d'extraction d'icône 32 bits telles que la fonction ExtractIcon de charger ces icônes depuis votre DLL 16 bits.

Le code 32 bits qui extrait les icônes des modules 16 bits ne peut malheureusement pas s'offrir le luxe d'utiliser des fonctions du noyau telles que FindResource pour trouver l'icône dans un fichier. Le code doit au lieu de cela implémenter son propre mini-chargeur qui analyse l'en-tête du module 16 bits, recherche la table des ressources et l'analyse ensuite à la recherche des ressources d'icône désirées. C'est seulement après avoir fait tout cela que le code 32 bits peut enfin convertir les pixels en icône.

  (Cliquer sur l'image pour l'agrandir)

Comme vous pouvez l'imaginer, le code qui fait cela est très ancien et fragile. Il comporte de nombreux risques d'erreur lors de l'analyse de fichiers binaires pouvant être corrompus, par erreur ou par malveillance. L'équipe chargée des performances demandera des modifications de la façon dont le fichier est ouvert afin d'améliorer les performances sur les réseaux, puisque différents modes d'ouverture et de partage ont des conséquences différentes pour la mise en cache en réseau. L'équipe responsable de la fiabilité peut demander à son tour que le code d'analyse soit réécrit pour éviter l'utilisation de fichiers mappés en mémoire. En fin de compte, le coût de maintenance de ce genre de code commence à dépasser la valeur qu'il offre. Parce que, vraiment, qui écrit encore des programmes 16 bits de nos jours ?

Toutefois, vos programmes 16 bits s'exécuteront toujours tant que la couche d'émulation 16 bits sera présente. (Il est vrai que Windows Vista 64 bits ne compte pas de couche d'émulation 16 bits, mais ceci n'est pas une régression par rapport à Windows XP, car Windows XP 64 bits ne possédait pas non plus de couche d'émulation 16 bits. Les choses ne se sont pas améliorées, mais elles ne se sont pas non plus dégradées.)

Tout ce que vous perdez dans Windows Vista, c'est la possibilité de lancer ExtractIcon depuis votre programme 32 bits et d'obtenir une icône à partir d'une DLL 16 bits. Si vous avez un raccourci vers un programme 16 bits sur votre menu Démarrer, l'icône de ce raccourci s'affichera maintenant comme une icône de programme générique puisque l'Explorateur Windows ne peut plus extraire l'icône du programme 16 bits depuis son fichier exécutable principal. Ce n'est pas une grande perte. Mais si cela vous ennuie vraiment, vous pouvez modifier les propriétés du raccourci et lui donner une icône d'un module 32 bits.

Le seul endroit où j'ai vu que cette perte de fonctionnalité poser problème, c'est dans les bibliothèques d'icônes qui sont produites par un outil d'édition d'icônes particulier. Pour une raison quelconque, ce programme enregistre par défaut ses icônes en tant que ressources dans des DLL 16 bits, ce qui signifie que vous ne pouvez plus accéder à ces icônes à partir de code 32 bits. Il suffit bien sûr pour corriger cela de réenregistrer ces bibliothèques d'icônes en tant que ressources dans des DLL 32 bits.

Je suis sûr qu'en fin de compte, si ce n'est pas déjà le cas, quelqu'un écrira un petit programme pour extraire toutes les icônes d'une DLL 16 bits et recréer ensuite une DLL 32 bits de ressources uniquement avec ces icônes, afin que les gens qui disposent d'anciennes icônes dans des DLL 16 bits puissent continuer à les utiliser comme raccourcis sur leur menu Démarrer. Mais je dois dire que si vous écrivez ce programme, vous ne trouverez probablement personne qui en ait besoin. Nombre de demandes d'un tel programme reçues par l'équipe interface utilisateur de Windows : zéro.

Raymond Chen, The Old New Thing, et son livre du même titre traitent de l’historique de Windows et de la programmation Win32. Il n'essaie jamais de monter dans la rame de métro lorsque les portes sont sur le point de se fermer.

© 2008 Microsoft Corporation et CMP Media, LLC. Tous droits réservés. Toute reproduction, totale ou partielle, est interdite sans autorisation préalable.