Quel est le processus d’amorçage de Windows 7 ?


Ce processus de démarrage est en grande partie identique entre Windows Vista et Windows 10. Il existe cependant deux variantes que je vais explorer : Legacy Boot (depuis Vista) et UEFI boot (depuis 7, réellement supporté depuis 8).

Dans Legacy boot, le BIOS trouve le disque où Windows est installé, lit le MBR, vérifie les 2 derniers octets s'ils correspondent à un certain modèle (marquer comme amorçable), si oui les charger en mémoire à une adresse fixe et exécuter le code du premier octet du secteur chargé. Le code de ce secteur va décoder les données de la partition (également dans le secteur ; vous avez 446 octets de code et 4 partitions de 16 octets chacune), trouver laquelle d'entre elles est la partition active, vérifier qu'elle est amorçable (même signature dans les deux derniers octets) et, si c'est le cas, la charger en chaîne (à une adresse différente je suppose ?). Le premier secteur du disque est le master boot record (MBR), le premier de la partition est le partition boot record (PBR).


Le PBR peut fonctionner avec tous ses 510 octets comme du code, bien que certains puissent en fait contenir une signature du système de fichiers. Le code va essayer de charger un fichier non compressé à partir du disque, à savoir "bootmgr". Ce fichier est chargé en continu et, encore une fois, à une adresse fixe. Et il peut être aussi grand que nécessaire, et en fait il est assez grand. Legacy bootmgr chargé, passez à la section après le chargement de bootmgr ci-dessous.

Dans le démarrage UEFI, le firmware va :
1) Vérifier les entrées de démarrage mémorisées dans le matériel, et les essayer toutes. Si la première soit n'est pas trouvée ou n'est plus valide, soit sort simplement vers le firmware (parce que oui, il est facile de sortir vers le firmware contrairement au cas MBR où techniquement c'est possible), il essaie juste la suivante.
2) Si aucune de ces entrées de démarrage n'est considérée, il essaie maintenant de trouver une partition sur chaque disque (généralement la partition système EFI, bien que cela varie) et de trouver efibootbootx64.efi (je pense que ce chemin est correct ; quelqu'un me dira si ce n'est pas le cas) et d'essayer de le démarrer.
3) Une fois que l'entrée de démarrage appropriée (en réalité un fichier .efi, qui a un certain format de fichier très similaire aux exécutables de Windows, mais qui n'est pas directement exécutable sous Windows) est trouvée, elle est chargée et exécutée. Bootmgr UEFI chargé.


Après avoir chargé bootmgr, le gestionnaire d'amorçage vérifie ses propres configurations (des ruches de registre, essentiellement un format de base de données identique à celui utilisé dans les ruches de registre Windows réelles ; en fait, ces configurations sont toujours montées dans le registre Windows après le démarrage) et trouve la configuration du système Windows qui doit être démarré, OU qu'il doit charger un système Windows depuis l'hibernation. Dans ce dernier cas, il recherche l'exécutable winload.exe pour ce système Windows et le charge en chaîne, comme ça (celui-là charge les données du fichier d'hibernation et on a fini). Dans le premier cas, il cherche ntoskrnl.exe (le noyau Windows), je ne sais pas si c'est le noyau ou le gestionnaire de démarrage qui charge les pilotes critiques (les autres sont certainement chargés par le noyau). Une fois le noyau chargé, le gestionnaire d'amorçage le place dans son emplacement mémoire quasi final et lui donne le contrôle.

Une fois le noyau chargé, les pilotes supplémentaires sont chargés, les ruches du registre système sont montées, les périphériques sont initialisés (en utilisant le code des pilotes), puis l'espace utilisateur est lancé (le processus smss.exe est spawné, celui-ci spawn les processus csrss.exe pour toutes les sessions, le processus wininit.exe pour la session 0 et le processus winlogon.exe pour les autres sessions). Ensuite, dans la session 0, wininit.exe va lancer services.exe, qui lui-même lance tous les services Windows ; lsass.exe qui implémente diverses actions critiques liées à la sécurité. Les différents services sont lancés (il y en a beaucoup trop, et ils varient d'un système à l'autre en fonction des logiciels installés), ceux-ci peuvent lancer d'autres processus etc.

winlogon.exe peut lancer logonui.exe (montrant l'écran de verrouillage/login), userinit.exe (un processus temporaire pour lancer le shell de l'utilisateur, généralement explorer.exe qui affiche les icônes du bureau et la barre des tâches, et autrement effectuer les configurations initiales des sessions utilisateur, c'est-à-dire les sessions >0), dwm.exe (compositeur Aero, obligatoire depuis Windows 8).

Et ensuite, c'est un territoire inexploré pour moi. Car tout est variation, en fonction des logiciels installés. explorer.exe peut en lancer quelques-uns, les services peuvent en lancer d'autres qui eux-mêmes lancent d'autres programmes utilisateurs, en fonction de la configuration de l'utilisateur, et ainsi de suite.

.