Les fichiers DLL et bibliothèques de liens dynamiques (librairies) dans Windows

Lorsque l’on utilise Windows sur son PC, tôt ou tard on tombe sur les fichiers DLL (Dynamic Link Library).
En général, à cause d’un message d’erreur de DLL manquantes ou introuvables.
On parle alors de bibliothèques de liens dynamiques pour désigner ce type de fichiers DLL.

Vous pouvez alors vous poser des questions sur les fichiers DLL ?
A quoi servent les DLL ? Comment ça marche ?
Quels sont les fichiers DLL systèmes de Windows ?
Peut-on les supprimer ?

Cet article répond à toutes ces questions autour des fichiers DLL.

Les fichiers DLL et librairies dans Windows : qu'est-ce que c'est et comment ça marche

Les fichiers DLL et librairies

Qu’est-ce que fichiers DLL ?

Avant de commencer un mot rapide concernant le fonctionnement des programmes et applications sur Windows.
Windows fonctionne avec un format de binaire et exécutable spécifique Portable Executable soit donc Windows PE32 et Windows PE64.

Au moment de son exécution le programme se charge en mémoire, dans une zone définie.
Cela permet à ce dernier de stocker des données et informations que le processeur peut utiliser pour que le PC puisse effectuer les actions programmées par l’application.
Le programme peut aussi stocker des fichiers sur le disque dur comme les fameux fichiers temporaires mais pas que.

Les DLL pour optimiser la mémoire dans Windows

Certaines applications complexes possèdent des centaines de milliers ou millions de lignes de code et peuvent avoir besoin de beaucoup de mémoire pour fonctionner.
Dans ces cas là, le programme serait sous la forme d’un fichier EXE de plusieurs Mo ou Go.
Mais grâce aux fichiers DLL les programmes sont plus modulaires. C’est à dire qu’ils sont découpés en plusieurs morceaux et sections.
Cela évite donc de charger directement un exécutable de 2 Go dans le système mais seulement un fichier EXE réduit qui appelle et charge les fichiers DLL selon les besoins.
Cela permet aussi un gain de mémoire considérable et selon les actions demander par l’utilisateur, le programme cherche plus ou moins des DLL et augmenter sa zone mémoire.

C’est là tout l’intérêt des fichiers librairies DLL car elles permettent de stocker certaines fonctions, classes, variables, etc qu’un programme peut appeler sous la forme d’API.
Les applications peuvent aussi appeler des fonctions dans Windows.
Par exemple une application qui a besoin de lister les processus en cours de fonctionnement fait appel à cette fonction.
Windows lui retourne alors la liste.
Pas besoin de recoder la fonctionnalité dans l’application.
Un gain de temps aussi pour les développeur et concepteur de logiciels.
Enfin là aussi cela permet de partager en mémoire les fonctions de la DLL dans une zone où les programmes peuvent y accéder.
Ainsi la DLL ne se charge qu’une fois et tous les programmes accèdent à ses données. Cela permet de ne pas gaspiller de la mémoire.

Les DLL se trouvent dans la mémoire partagée (Shared memory), j’en parle dans l’article :

D’où le nom bibliothèques de liens dynamiques.
Puisqu’on s’en sert comme stockage de fonctions, boite de dialogues, etc et on pioche dedans.
Enfin c’est aussi pour cela que le dossier system32 de Windows compte beaucoup de fichiers DLL.

Les fichiers DLL dans le dossier system32 de Windows
Les fichiers DLL dans le dossier system32 de Windows

Les fichiers DLL : comment ça marche ?

C’est simple, lors de l’exécution d’un programme ce dernier peut appeler des DLL internes ou externes.
De même pendant son utilisation, le programme peut aussi charger des DLL.

Par exemple ci-dessous, le programme Acronis True Image comporte beaucoup de librairies et bibliothèques dans son dossier.
Notamment des DLL qui commencent par QT qui correspondant à une librairie graphique libre.
Ainsi Acronis utilise ces librairies pour déssiner les fenêtres de l’application.

Les fichiers DLL : comment ça marche ?

Lorsque vous exécuter Acronis True Image, il charge alors ces fichiers DLL internes mais aussi utilisent certains librairies et bibliothèques de Windows.

Les fichiers DLL en résumé

Une DLL est une bibliothèque qui contient du code et des données qui peuvent être utilisées par plusieurs programmes en même temps.

  • L’utilisation de DLL permet de promouvoir la modularisation du code, la réutilisation du code, l’utilisation efficace de la mémoire et la réduction de l’espace disque. Par conséquent, le système d’exploitation et les programmes se chargent plus rapidement, s’exécutent plus rapidement et prennent moins d’espace disque sur l’ordinateur.
  • Éviter de gaspiller de la mémoire en partageant une zone mémoire commune à plusieurs programmes.
  • Lorsqu’un programme utilise une DLL, un problème appelé dépendance peut empêcher l’exécution du programme. Lorsqu’un programme utilise une bibliothèques de liens dynamiques, une dépendance est créée. Si un autre programme remplace et rompt cette dépendance, le programme d’origine peut ne pas s’exécuter correctement.

La FAQ des DLL de Windows

Qu’est-ce qu’un fichier DLL ?

Les bibliothèques de liens dynamiques (DLL) sont comme des EXE mais elles ne sont pas directement exécutables. Ils sont similaires aux fichiers .so sous Linux / Unix. C’est-à-dire que les DLL sont l’implémentation par MS des bibliothèques partagées.
Les DLL ressemblent tellement à un EXE que le format de fichier lui-même est le même.
Les fichiers EXE et DLL sont basés sur le format de fichier PE (Portable Executable). Les DLL peuvent également contenir des composants COM et des bibliothèques .NET.

Que contient les fichiers DLL ?

Une DLL contient des fonctions, des classes, des variables, des interfaces utilisateur et des ressources (telles que des icônes, des images, des fichiers, …) qu’un EXE ou une autre DLL utilise.
C’est pour cela par exemple que lorsque vous créé un raccourci, vous pouvez utiliser des icônes toutes faites de Windows ou que les boîtes de dialogues se ressemblent toutes.

Quels sont les types de DLL ?

Il existe 2 types de bibliothèques. Bibliothèques statiques et bibliothèques dynamiques.
Dans Windows, les extensions de fichier sont les suivantes: Bibliothèques statiques (.lib) et bibliothèques dynamiques (.dll).
La principale différence est que les bibliothèques statiques sont liées à l’exécutable au moment de la compilation; tandis que les bibliothèques liées dynamiques ne sont liées qu’au moment de l’exécution.
Ainsi un programme peut importer des DLL dynamiques.
Alors que les statistiques sont intégrées lors de la compilation.

Peut-on supprimer un fichier DLL ?

Puisqu’elles sont nécessaires au fonctionnement de Windows et des applications, il ne faut en aucun cas les supprimer.
N’y toucher pas car vous risquez de rendre certaines applications inutilisables.

Les DLL dans les Framework : .Net FrameWork, Visual C++ Redistributable, …

Windows fournit beaucoup de DLL pour le fonctionnement général du système d’exploitation.

Mais les fichiers DLL peuvent être des fichiers développés par l’éditeur de l’application ou des bibliothèques de fonctionnement de Windows ou enfin des framework dans lequel l’application a été développé.
Souvent ces packages et framework sont liés à un langage de programme spécifique.
Les plus répandus :

Ces Frameworks sont des bibliothèques de DLL sur lesquels les développeurs peuvent s’appuyer pour créer des applications.
Ils proposent diverses fonctionnalités qui sont généralement nécessaires pour qu’une application fonctionne.
Par exemple des bibliothèques réseaux, disque, bref divers couches de fonctionnement liés à Windows.
Cela évite à tous les éditeurs d’applications de tout re-développer de à A à Z.

Enfin cette sur-couche permet de suivre les évolutions de Windows, sans que les éditeurs aient tout à re-développer lorsqu’une nouvelle de Windows arrive.

Le Framework est donc indispensables au bon fonctionnement de l’application et doit être installés avec la bonne version au préalable pour que celle-ci fonctionne.

Lorsque l’application est bien réalisée, le programme d’installation détecte que des bibliothèques de framework nécessaires ne sont pas installés sur le système et proposent des les installer.
Par exemple, ci-dessous, le programme d’installation (Setup) installshield propose d’installer Microsoft Visual C++ 2002 Redistribuable..

Installation de Visual C++ Redistributable
Installation de Visual C++ Redistributable

Si ce n’était pas le cas, l’application se serait installée et au lancement, vous auriez eu une erreur MSVCXXX.DLL manquant/introuvable et l’application n’aurait pas fonctionné.

Vous l’aurez compris, si une des DLL n’est pas présentes l’application ne peut pas fonctionner et lors de son exécution un message d’erreur apparaît.
Si la bibliothèque est vitale pour le fonctionnement de Windows, soit certains fonctionnalités de Windows ne pourront être utilisés, par exemple, vous tentez d’ouvrir le Panneau de configuration et une erreur s’affiche.
Soit tout simplement Windows ne pourra démarrer.

Cet article tente de vous aiguiller pour les cas les plus classiques de dysfonctionnements dû à l’altération de fichiers systèmes Windows ou manquantes.

DirectX

DirectX est un ensemble de technologies lié à la 2D, 3D, vidéo utilisé par les applications et notamment les jeux.
Il existe de multiples bibliothèques aussi de son, vidéo et autres sous la forme de DLL.
On l’utilise donc pour développer des applications multimédias comme des jeux.
Là aussi, si DirectX est endommagé, vous pouvez rencontrer des messages d’erreur de DLL comme xinput1_3.dll ou d3dx9_43.dll.

Liste des DLL importantes de Windows

Windows embarque des centaines de bibliothèques de fichiers DLL que l’on qualifie de fichiers systèmes.
Chacune ont des fonctions spécifiques que le système d’exploitation et les applications peuvent utiliser.

Les DLL systèmes de Windows

Comdlg32 exécute des fonctions communes liées aux boîtes de dialogue. Par conséquent, chaque programme peut utiliser la fonctionnalité contenue dans cette DLL pour implémenter une boîte de dialogue Ouvrir. Cela permet de promouvoir la réutilisation du code et une utilisation efficace de la mémoire.

Kernel32.DLL expose aux applications la plupart des API de base Win32, telles que la gestion de la mémoire, les opérations d’entrée / sortie (E / S), la création de processus et de threads et les fonctions de synchronisation. Beaucoup d’entre eux sont implémentés dans KERNEL32.DLL en appelant les fonctions correspondantes dans l’API native, exposée par NTDLL.DLL

GDI32.DLL (Graphics Device Interface (GDI) contient les fonctions d’affichage vidéo.

ntdll.dll (NT Layer DLL) – C’est le fichier d’export des API que les applications peuvent utiliser.
En clair, ils embarquent les appels systèmes qu’une application peut utiliser pour effectuer des actions comme lister des fichiers ou processus, ouvrir ou fermer des fichiers, etc.

Hal.dll (The Windows Hardware Abstraction Layer (HAL) – Le HAL implémente un certain nombre de fonctions qui sont implémentées de différentes manières par différentes plates-formes matérielles, ce qui, dans ce contexte, se réfère principalement au chipset. D’autres composants du système d’exploitation peuvent alors appeler ces fonctions de la même manière sur toutes les plates-formes, sans tenir compte de l’implémentation réelle.

NETAPI32.DLL fonctions d’appels pour les interfaces réseaux de Windows.

WS2_32.DLL stocke les API des fonctions Winsock de la couche réseau de Windows.

USER32.DLL implémente le composant Windows USER qui crée et manipule les éléments standard de l’interface utilisateur Windows, tels que le bureau, les fenêtres et les menus. Ainsi c’est cette DLL qui perme l’affichage des messages systèmes et d’erreurs dans les boîtes de dialogues.

Certains de ces DLL systèmes sont évoquées dans l’article suivant :

Les erreurs de DLL (introuvables ou manquantes, code erreur)

Les fichiers DLL sont importants pour le bon fonctionnement des applications.
Ainsi certains erreurs de lancement des applications sont liées à des problèmese et erreurs de DLL.
Souvent car le framework est manquant ou corrompus ou certaines DLL n’ont pas la bonne version.

Par exemple le code erreur 0xc0000005 est typiquement lié à un problème de Visual C++ Redistributable Package.

On peut aussi avoir des erreurs de DLL manquantes ou introuvables comme MSVCP100.dll, MSVCR.110 dll, ATL110.dll, MSVCP140.dll, api-ms-win-crt-runtime-l1-1-0.dll.
L’article suivant en parle avec les solutions :

ou encore il y a les erreurs d’image incorrect :

Malwares et injection de DLL

Les librairies Windows sont donc au même format que les exécutables de Windows (PE Portable).
Ainsi un malware peut se présenter sous la forme d’un fichier DLL.
Cela permet d’injecter la DLL dans un fichier système pour l’en contrôler.
Cela rend la détection du malware plus difficile et aide à contourner certains règles de pare-feu.

J’en parle dans l’article suivant :

Sources :

Trouver la solution sur le forum d'aide

Vous êtes arrivé au terme de l'article Les fichiers DLL et bibliothèques de liens dynamiques (librairies) dans Windows mais vous n'avez pas trouvé la solution à votre problème...
Suivez ces articles du forum pour trouver une réponse ou demandez à votre tour de l'aide sur le forum


Vous avez trouvé cet article utile et interressant, n'hésitez pas à le partager...
Une question informatique ?
Un virus à supprimer ? Votre PC est lent ?
Demander de l'aide sur le forum
0 Partages
Tweetez
Partagez
Enregistrer
Partagez