Загрузка ядра
Получив информацию об аппаратных средствах компьютера и выбранном аппаратном профиле, Ntldr загружает в память уровень аппаратных абстракций (Hal.dll) и ядро операционной системы Ntoskrnl.exe. Загрузив и запустив ядро, Ntldr передает ему информацию, собранную программой Ntdetect.com.
Информация о выбранном аппаратном профиле передается загрузчику, когда пользователь нажимает клавишу Enter в меню Hardware Profile/ Configuration Recovery. Помимо этого, загрузчик может сделать выбор автоматически по истечении указанного интервала времени (или в случае, если в системе существует только один аппаратный профиль). На данном этапе ядро и уровень аппаратных абстракций еще не инициализированы. Далее загрузчик просматривает реестр и загружает улей HKEY_LOCAL_MACHINE\ SYSTEM из файла %SystemRoot%\system32\Config\System.
В Windows NT/2000 загрузчик на данном этапе извлекал информацию о заданном по умолчанию или определенном пользователем размере реестра (registry quota). Как будет показано в главе 24 "Работа с системным реестром", в Windows XP и Windows Server 2003 необходимость в ограничении по размеру реестра отпала.
На данном этапе загрузчик активизирует API для работы с реестром и создает набор управляющих параметров (control set), который будет использоваться для инициализации компьютера. Эти задачи являются подготовительными для загрузки драйверов. Значение, заданное в ключе реестра HKEY_LOCAL_MACHiNE\SYSTEM\select (рис. 3.1), определяет, какой набор управляющих параметров из перечисленных в ключе HKEY_LOCAL_MACHINE\SYSTEM должен использоваться при загрузке. По умолчанию загрузчик использует набор управляющих параметров, определяемый значением Default.
Рис. 3.1. Ключ реестра HKEY_LOCAL_MACHINE\SYSTEM\Select
Если пользователь выбрал последнюю успешно загруженную конфигурацию (LastKnownGood), то загрузчик использует набор управляющих параметров, определяемых значением LastKnownGood. На основании сделанного пользователем выбора и значения ключа Select загрузчик определяет, какой из наборов управляющих параметров (controlSet00x) будет использоваться. После этого загрузчик устанавливает значение Current ключа Select на номер набора управляющих параметров, который он будет использовать.
Далее загрузчик сканирует все сервисы (службы), определенные ключом реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services, И ищет драйверы устройств, для которых значение start равно 0x0 (такое значение указывает на то, что драйверы должны быть загружены, но не инициализированы). Как правило, драйверы с такими значениями представляют собой низкоуровневые драйверы устройств, например, драйверы дисков. Значение Group для каждого драйвера устройства определяет порядок, в котором загрузчик должен его загружать. Ключ HKEY_LOCAL_MACHINE\SYSTEM \CurrentControlSet\Control\ServiceGroupOrder реестра определяет порядок загрузки.
К моменту завершения этой фазы все базовые драйверы загружены и активны, за исключением случаев, когда один из критически важных драйверов не инициализировался, вследствие чего началась перезагрузка системы.