# NTLDR

NTLDR, qui signifie NT Loader, est le nom du chargeur d'amorçage de Windows 2003, XP, 2000 et NT 4.0 et NT 3.x sur les processeurs x86 et x86-64 (AMD64 et Intel 64) ; les versions suivantes et actuelles de Windows (Vista, Windows 7, Windows 8 et Windows Server 2008) ne l'utilisent plus.
NTLDR permet de choisir, lorsque plusieurs systèmes Microsoft Windows sont installés sur une même machine, quel système on souhaite amorcer. C'est la partition choisie qui est considérée dans le cas général comme disque logique C:, bien que la séparation entre le disque de boot et le disque système soit prévue par ailleurs au niveau de NT et de ses successeurs.
Le fichier de configuration de NTLDR, boot.ini est en ASCII (il est assez similaire au fichier de configuration utilisé par GRUB).

## Processus de démarrage

Voir : processus de démarrage de Windows NT.
NTLDR passe le système en mode protégé et il gère les tables spécifiques aux processeurs de la famille x86 :
* la GDT (Global Descriptor Table), pour gérer la mémoire ;
* IDT (Interrupt Descriptor Table), celle-ci permettant de contrôler les interruptions (interruptions logicielles et exceptions).
NTLDR charge également le noyau windows NT (en général : Ntoskrnl.exe), les fichiers hal.dll (couche d'abstraction matérielle), ntdetect.com ; puis il passe la main au noyau.

## Fichier boot.ini
### Outils graphique pour le paramétrage de NTLDR via boot.ini

Le paramétrage de NTLDR est fait par le fichier boot.ini. Il est possible de le modifier avec l'un des outils suivants :
* l'utilitaire graphique MsConfig.exe de Microsoft ;
* via l'item système du panneau de configuration, onglet avancé, dans démarrage et récupération ;
* un éditeur de texte quelconque (Wordpad.exe, ou NotePad.exe) ; dans ce cas, il ne faut pas faire d'erreur sur la syntaxe (respecter le format fichier initialisation). Toute erreur grossière risquerait de rendre impossible le boot pour un non-informaticien ;
* l'utilitaire en ligne de commande BOOTCFG de Microsoft ;
* utilitaire de Symantec : l'outil GDISK32.EXE de Ghost.

### Les switch du noyau Windows

Microsoft publie les explications sur ces switch sur son site web.

#### Sécurité

* Le switch noexecute=optin permet d'installer la sécurité DEP (Data Execution Prevention). Sur Windows XP service pack 2 et Windows Server 2003, il est installé automatiquement.

#### Analyser les différentes étapes du boot

Le switch bootlog permet de lister les différents modules chargés durant le boot ; le résultat est écrit dans le fichier de log %SystemRoot%\ntbtlog.txt: Les 2 premiers modules sont dans l'ordre :
* noyau windows NT ;
* hal.dll
Puis viennent les nombreux pilotes.
Le switch sos permet de détailler 3 étapes du boot, directement sur l'écran :
* le chargement de chaque module (la liste est longue, mais elle n'apparaît que fugitivement à l'écran car cette étape dure très peu de temps) ;
* la version du système d'exploitation, le nombre de processeur, la quantité de RAM ;
* la phase de vérification des différents systèmes de fichiers (déclenché par le gestionnaire de sessions).
Le switch basevideo permet d'analyser les problèmes liés à un pilote vidéo. Il remplace le pilote vidéo par le pilote VGA de base.
Les autres switch sont réservés à des programmeurs, capables d'utiliser les outils de débogage fournis par Microsoft. Ces switch de débogage sont :
* le switch crashdebug ;
* le switch debug ;
* le switch debugport=comx ;
* le switch baudrate=nnn paramètre le taux en baud du port de débogage du noyau ;
* le switch nodebug ;
* le switch /channel permet de déboguer certains problèmes FireWire (IEEE1394).

#### Les quatre valeurs du switch safeboot

* /safeboot:dsrepair (utile seulement sur un contrôleur de domaine active directory) ;
* /safeboot:minimal ;
* /safeboot:minimal(shell_alternatif) pour utiliser un shell alternatif ;
* /safeboot:network

#### Mettre un autre noyau ou un autre hal.dll

Le noyau et hal.dll peuvent être remplacés respectivement par les switch kernel et HAL.

#### Réduire le temps de boot

Le switch /fastdetect permet d'éviter le temps d'attente sur la détection de la souris. Dans certains cas, il est installé automatiquement.

#### Réduire la quantité de RAM pour des raisons de test

Pour pouvoir faire des tests, il peut être nécessaire de réduire la quantité de RAM utilisé par Windows.
Les switch /burnmemory ou /maxmem permettent de réaliser cela.

#### Donner plus de mémoire virtuelle aux processus utilisateur

Par défaut, sur les 4 gigaoctets de la mémoire virtuelle de Windows, la moitié est réservée pour les librairies et pilotes de périphériques exécutés en mode noyau.
Dans certains cas, il peut être intéressant de donner plus de mémoire aux processus en mode utilisateur, les 2 cas que propose Microsoft sont :
* le serveur de messagerie Exchange (store.exe) ;
* la base de données sur Windows NT Server Enterprise Edition (Windows NT Server/E) version 4.0 (paramétrage de la RAM 4GT).
Les switch 3GB et userva permettent de réaliser cela.
Pour dépasser la limite à 4 gigaoctets en mode 32-bits, voir AWE : Address Windowing Extensions(en) (en).

#### Switch sur les processeurs

* Le switch numproc ;
* le switch onecpu.

#### Autres

* Les switch pae et /nopae concernent le Physical Address Extension ;
* le switch noguiboot indique de ne pas utiliser la barre de progression bitmap sur la phase de boot ;
* le switch noserialmice:comx ;
* le switch pcilock concerne le PCI dans le BIOS ;
* le switch redirect permet de paramétrer Emergency Management Services, sur RS-232) ;
* /usepmtimer ;
* les switch w95 et w95dos ;
* le switch year permet de ne pas tenir compte de la date du BIOS.

### Droits MS-DOS et NTFS du fichier boot.ini

Par défaut, les droits MS-DOS du fichier boot.ini sont lecture seule.
Si la partition de boot est au format NTFS (ce qui est le plus courant), alors, par défaut, les utilisateurs qui ne sont pas administrateurs n'ont pas de droit NTFS en lecture sur le fichier boot.ini.

### Base de registre

Les paramètres utilisés pour le boot sont stockés dans la base de registre dans HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ :
* pour la partition contenant le système d'exploitation : SystemBootDevice (exemple : multi(0)disk(0)rdisk(0)partition(2)) ;
* pour les switch de boot : SystemStartOptions, exemple pour Windows XP service pack 2 : NOEXECUTE=OPTIN FASTDETECT.
Par défaut, les utilisateurs qui ne sont pas administrateurs ont seulement un droit en lecture sur ces clés.

### Comparaison avec les chargeurs d'amorçage de UNIX/linux

Le fichier boot.ini de Windows a un rôle analogue au fichier de configuration du chargeur d'amorçage grub de linux. On peut aussi le comparer au Boot Camp du Mac OS X Leopard.
Le fichier boot.ini de Windows et le fichier lilo.conf du chargeur d'amorçage lilo de linux ne sont pas tout à fait analogues : il faut utiliser la commande lilo pour que les modifications du fichier lilo.conf soient prises en compte.
La syntaxe pour identifier une partition est très différente entre Windows et UNIX/linux. Dans le boot.ini de Windows, le format ARC est utilisé (voir (en) Advanced RISC Computing (en)), alors que sous unix, l'identifiant d'une partition est du type /dev/- - - - -NN.
| Type de disque | Exemple de format dans boot.ini | Exemple de format avec grub ou lilo |
| IDE | multi(0)disk(0)rdisk(0)partition(2) | /dev/hda2 |
| SCSI | scsi(0)disk(0)rdisk(0)partition(2) | /dev/sda2 |

## Autres chargeurs d'amorçages pour les versions de Windows basées sur NT
### IA64ldr.efi pour processeur Itanium

C'est le chargeur d'amorçage pour les versions de Windows sur processeur Itanium.

### "OsLoader" et "SetupLdr"

NTLDR est en fait la concaténation de deux programmes semi-indépendants, nommé StartUp et OsLoader. Le rôle du premier est de passer du mode réel de démarrage au mode protégé paginé 32 bits, et de fournir ensuite à OsLoader l'accès aux services sous-jacents tels que ceux du BIOS.
Dans les architectures RISC de Windows NT 3.x et 4.0, cette différence de mode n'existe pas, et NTLDR est alors remplacé par le programme "OsLoader.exe", chargé directement par le micrologiciel. Comme ces versions n'ont pas eu un grand succès commercial, elles sont tombées dans l'oubli.
Dans le cas d'un démarrage directement depuis le réseau (Preboot Execution Environment), les deux parties sont séparées, la carte charge d'abord un module StartUp adapté au démarrage depuis le réseau, lequel passe en mode protégé et charge ensuite OsLoader.
Lors de l'installation de Windows, le chargeur OsLoader.exe est remplacé par un autre chargeur, SetupLdr.exe, qui n'exploite pas le fichier boot.ini ; SetupLdr.bin est la concaténation du module StartUp et de SetupLdr.exe ; SetupLdr.bin peut être renommé sur disque en $LDR$ (installation via le disque dur) ou CMLDR (console de récupération) pour respecter le format de 5 lettres.

## Successeur

À partir de Windows Vista et ultérieurs (et de sa version serveur: Windows Server 2008), NTLDR est remplacé par Boot Configuration Data.
Le fichier de configuration n'est plus boot.ini ; à la place, c'est une ruche du registre : Boot Configuration Data. NTLDR est remplacé par winload.exe.
Pour modifier la configuration du boot, Microsoft fournit des utilitaires :
* graphique Msconfig.exe, comme dans les versions précédentes ;
* en ligne de commande : le nouvel outil bcdedit.exe.