Assiste.com - Sécurité informatique - Vie privée sur le Web - Neutralité d'Internet

cr  10.01.2013      r+  03.02.2024      r-  16.05.2024      Pierre Pinard.         (Alertes et avis de sécurité au jour le jour)

Que sont les ressources communes trouvées dans WinSxS, en particulier les « DLLs » (les « DLLs » ne sont pas les seules ressources communes (partagées) présentes dans WinSxS) ?

Les « DLLs » (Dynamic Link Library) (bibliothèque de liaisons dynamiques) sont des fonctionnalités standards se traduisant par des composants (bouts de programmes standards), exécutant une fonction spécifique courante que l'on va retrouver dans de nombreuses applications. La notion de composants logiciels (une brique logiciel) liés à une architecture logiciel de plus haut niveau (une application) existe depuis toujours, sous divers noms. C'est le concept du DRY ("Don’t Repeat Yourself" - "Ne vous répétez pas").

Les DLLs sont fournies par les éditeurs de logiciels, Microsoft bien entendu, et les grands éditeurs produisant de nombreuses applications (Adobe etc.).

  1. Premier avantage des DLLs :
    Lorsqu'un développeur écrit une application, il a intérêt à utiliser des briques de code (exemple : les « DLLs ») toutes faites pour accélérer son développement.

  2. Second avantage des DLLs :
    Le programmeur est censé s'appuyer sur du code normalement déjà bien stable (débugué).

  3. Troisième avantage des DLLs :
    Le « poids » d'une application développée en utilisant des DLLs est plus petit. De nombreuses fonctions ne sont représentées que par un appel à une fonctionnalité standard, externe au programme, qui sera mise à disposition du programme (« montée en mémoire ») par un mécanisme du système d'exploitation (techniquement, c'est une phase de post compilation (traduction du code écrit par le programmeur en un code exécutable par un ordinateur), appelée « Édition des liens » (Link Edit), qui introduit, dans le code de l'application, les appels aux bibliothèques externes).

  4. Quatrième avantage des DLLs :
    Le mécanisme du système d'exploitation vérifie si la ressource (la DLL) est déjà montée en mémoire, appelée par une autre application et, si ce n'est pas le cas, il la fait monter en mémoire et donne l'adresse RAM du point d'entrée de la ressource à l'application qui l'appelle. Ainsi, on comprend qu'une ressource disponible sous forme de DLL ne monte qu'une fois en RAM et est mise à disposition de plusieurs applications.

  5. Cinquième avantage des DLLs :
    Elles favorisent une technique de développement architectural des applications dites « modulaire », ce qui est, intellectuellement et pratiquement, très satisfaisant.

Donc, les DLLs, c'est génial... Cela ne présente que des avantages (lire : DRY ("Don’t Repeat Yourself" - "Ne vous répétez pas")) !

On peut voir quelles sont les DLLs utilisées par une application (et autres composants externes), et, éventuellement, rechercher quelles sont les DLLs et autres dépendances manquantes, avec Dependency Walker.

Les notions de « composants liés à l'architecture d'un programme principal », au moment de sa « post compilation » (phase dite d' « édition des liens »), existe depuis la nuit des temps informatiques.

J'utilisais des éditeurs de liens sur IBM 360 au tout début des années 1970. La dixième édition de ce document d'IBM sur l'édition des liens sous l'OS des IBM 360 remonte à 1972 !

Dans Windows, la notion de composants remonte au tout début de Windows, dès sa version 1.0, en 1985. L'enfer des DLLs conduira Microsoft à réagir avec un magasin de composants contenant toutes les formes de composants utilisées, dont les DLLs. Ce magasin prend le nom de WinSxS, à partir de Windows Vista.

Ce magasin sera protégé, ne pouvant être manipulé que par des applications éligibles au compte utilisateur spécial « TrustedInstaller » et à travers une procédure particulière.




L'utilisateur et les équipes de développement descendent dans « l'enfer des DLL », le fameux « DLL Hell », dès qu'une DLL est manquante ou ne répond plus à ce que l'on attend d'elle :

  • Elle a été effacée par un désinstalleur d'une application, sans tenir compte du fait qu'elle pouvait servir à d'autres applications (une DLL est le principe même d'un code partagé entre plusieurs applications !). C'est la faute à d'innombrables désinstalleurs d'applications et à d'innombrables utilitaires inutiles et dangereux, prétendant nettoyer le Registre Windows pour accélérer votre ordinateur.
    Ne touchez jamais au Registre Windows.

  • Modifiée, en partant certainement d'une bonne intention, par un éditeur de logiciel qui a « amélioré » une DLL, faisant, par la même occasion, chuter toutes les autres applications qui utilisent cette DLL et qui ont absolument besoin de l'ancienne version, fiable et stable.
    Ne touchez jamais au Registre Windows.

DLL Hell est un nom désignant un ensemble de problèmes rencontrés avec le concept des DLL sous Microsoft Windows, dont :

  • Les problèmes de conflits de versions
  • Les problèmes de DLL manquante
  • Les problèmes de DLL dupliquées
  • Les problèmes de DLL pas, plus ou mal enregistrées dans le Registre Windows
  • Etc.

Pourquoi ?

  1. Parce qu'une application a été mise au point à un moment donné, avec une version précise de chaque DLL qu'elle utilise, mais que, depuis, des petits malins, fournisseurs de DLL, comme Microsoft, Adobe et Compagnie, on ré-écrit pour qu'elles fassent le job mieux et plus vite. Un jour, à l'occasion d'une installation ou d'une mise à jour d'un logiciel quelconque, l'ancienne DLL et remplacée par sa mise à jour et... plusieurs des applications qui utilisent cette DLL ne fonctionnent plus. C'est l'enfer !
    Ne touchez jamais au Registre Windows

  2. Parce qu'un désinstalleur d'une application, ou une de ces innombrables applications imbéciles de nettoyage, défragmentation et accélération du Registre Windows (je promets, depuis des années, de mettre TOUTES ces applications, toutes menteuses et trompeuses, dans la Crapthèque), a purement et simplement désinscrit la DLL, voire a carrément détruit le fichier !
    Ne touchez jamais au Registre Windows

  3. Parce que :

    • Lorsqu'une DLL est inscrite dans le Registre Windows avec une première application qui l'utilise, son inscription est affublée d'un compteur de partage mis à 1 (dans une valeur de type Dword dans le Registre Windows).

    • Lorsqu'une nouvelle application est installée, utilisant la même DLL, celle-ci n'est pas ré-inscrite, mais son compteur de partages augmente de +1.

    • Lorsqu'une application est désinstallée, les compteurs des DLL qu'elle partage avec d'autres applications sont décrémentés (-1).

    • Lorsque ce compteur arrive à zéro, on estime que la DLL n'est plus utilisée par aucune application. En théorie, mais en théorie seulement, non seulement la DLL n'est plus partagée, mais elle est devenue inutile. La DLL peut être désinscrite, et même détruite pour gagner de la place. Un de ces utilitaires inutiles (qui devraient être interdits), de nettoyage et prétendue accélération de Windows par la réorganisation du Registre Windows, va s'en apercevoir et va effectivement désinscrire la DLL et détruire son fichier, risquant d'anéantir le fonctionnement d'autres applications qui ne s'inscrivent pas dans le Registre Windows pour fonctionner ou n'inscrivent pas leurs utilisations de DLL. En plus, pour une raison ou pour une autre (coupure de courant, plantage du système, etc.), les compteurs de partage peuvent se retrouver à zéro de manière totalement erronée.

      Ne touchez pas aux DLL et ne les détruisez jamais ! Écoutez nos mises en garde et ne donnez pas raison au virus PEBCAK.
      Ne touchez jamais au Registre Windows

    • Parce qu'une DLL peut exister sous plusieurs versions simultanées (et il n'y a pas que la notion de version 16 bits, 32 bits et 64 bits).
      Ne touchez jamais au Registre Windows

    • Parce que l'éditeur du logiciel qui ne fonctionne plus a disparu et que le logiciel ne fonctionnera plus jamais. Si personne ne dispose des codes sources pour relancer une compilation et une édition des liens (« link edit »), avec les DLL mises à jour, le logiciel est définitivement mort sauf à trouver les DLL d'origine et à les copier dans le répertoire même où est installée l'application.
      Ne touchez jamais au Registre Windows




Peu après la création de WinSxS (à partir de Windows Server 2008) est apparu WRP (Windows Resource Protection) qui empêche tout remplacement des fichiers, répertoires et clés du Registre Windows essentiels au fonctionnement de Windows.

Les permissions totales d'accès pour modifier les ressources protégées par WRP (Windows Resource Protection) sont restreintes au compte utilisateur spécial appelé TrustedInstaller, qui est le seul à avoir un contrôle total sur ces ressources (il est le seul à avoir un contrôle, y compris manuel, partout).


Permissions d'accès aux ressources protégées par WRP (Windows Resource Protection)
Permissions d'accès aux ressources
protégées par
WRP (Windows Resource Protection).


Ces ressources ne peuvent être modifiées qu'en utilisant un mécanisme appelé « Supported Resource Replacement Mechanisms » applicable aux installations des :

  • Service packs Windows et Service Release installés sous le compte TrustedInstaller.

  • HotFixes installés sous le compte TrustedInstaller.

  • Upgrades installés sous le compte TrustedInstaller.

  • Updates installés sous le compte TrustedInstaller.

On remarquera que, aussi loin que l'on puisse chercher sur le site de Microsoft ou sur technet.com, il n'est jamais question de vider ou alléger WinSxS, ni d'effacer des DLL ou des assemblages. C'est la contrepartie de toute la sécurité imposée autour des DLL auxquelles, justement, il n'est pas question de toucher.

Tableau de synthèse des réglages des services Windows.