Этапы построения реестра
Шаги загрузки реестра требуют присутствия NTLDR, ntdetect.com и boot.ini в
корневой каталог активного раздела, системный раздел.
Последовательность загрузки ПК начинается, когда самотестирование при включении питания (POST) загружает BIOS в
Память. BIOS считывает MBR, первый физический (главный загрузочный) сектор на
жесткий диск. BIOS выполняет загрузочный код MBR, который находит активный
раздел, корневой каталог и загружает NTLDR, который
- переключает процессор(ы) в режим 32-битной плоской памяти и загружает себя в
высокая память, чтобы максимизировать память, доступную для процесса загрузки. - запускает соответствующую систему мини-файлов в зависимости от того, активен ли
раздел FAT или NTFS. Драйверы мини-файлов встроены в NTDLR и могут считывать
либо FAT, либо NTFS. - анализирует boot.ini и отображает варианты ОС. Если
boot.ini отсутствует, ntldr предполагает, что C:WINNT является местом для NT. - NTLDR начинает загрузку выбранной ОС. Если это ПК с двойной загрузкой,
требуется дополнительный файл BOOTSECT.DOS. Управление передается BOOTSECT.DOS, если
выбрана другая ОС. BOOTSECT.DOS — это загрузочный сектор, требуемый другим
OS и может не иметь ничего общего с операционной системой DOS. Когда альтернативный
Выбирается ОС, bootsec.dos перемещается в загрузочный сектор жесткого диска и
Загрузчик для конкретной ОС вступает во владение. Например, IO.SYS для MS-DOS или OS2LDR.EXE для
ОС/2. - Если выбрана ОС NT, NTLDR переключается в режим 16-битной памяти и загружает ntdetect.com, 16-битное приложение, которое запрашивает
аппаратные компоненты ПК и создает поддерево динамического реестра HARDWARE, которое передается обратно в NTLDR. Поддерево HARDWARE HKEY_LOCAL_MACHINE существует только в памяти и доступно только для чтения
природе и восстанавливается при каждой перезагрузке. Остальные поддеревья генерируются
чтение соответствующих файлов hive и hive.log и по своей природе предназначены для
модифицированный. См. Совет по реестру: файлы, используемые для создания реестра, для получения дополнительной информации о соответствии между жесткими
управлять файлами кустов и поддеревьями реестра. - NTLDR загружает драйверы уровня загрузки, т. е. те драйверы, для которых значение Start = 0. Эти драйверы загружаются, но не инициализируются.
Дополнительный файл NTBOOTDD.SYS будет присутствовать для систем, которые загружаются с
SCSI и SCSI BIOS включены. - ntoskrnl.exe
- Часть загрузки ядра начинается, когда NTLDR запускает ntoskrnl.exe и экран становится синим. В этот момент ntldr снова переключился на защиту памяти.
- После загрузки драйверов уровня загрузки драйверы уровня ядра в HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices
загружены – это драйверы со значением Start=1.Если вы проверите поддерево HKEY_LOCAL_MACHINESYSTEM,
вы увидите набор поддеревьев, таких как ControlSet001, ControlSet002,
ControlSet003, CurrentControlSet и Select. Клавиша Select записывает процесс выбора — какое поддерево было
используется для управления текущей загрузкой (ControlSet001 или ControlSet002 или…). Select имеет значения Current, Default, Failed и LastKnownGood. Current будет соответствовать Default или LastKnownGood в зависимости от
от того, выбрали ли вы загрузку с помощью LastKnownGood
набор управления. Если вы выбрали LastKnowGood, значение Failed будет указывать, какой набор
набор элементов управления по умолчанию и был объявлен «неудачным» из-за вашего выбора LastKnownGood. Если это обычная загрузка, Default и Current указывают на
тот же набор элементов управления (скажем, 0x1), а LastKnownGood
набор управления 0x2. Поддерево набора элементов управления, используемое во время загрузки, становится доступным
через имя CurrentControlSet для нашего удобства. В
в этот момент контрольный набор указал как LastKnownGood
копируется во вновь созданный набор элементов управления Clone. Таким образом
копия набора элементов управления, используемая для загрузки, остается изолированной и неизменной. Когда ты
при успешном входе в систему загрузочный набор элементов управления считается «хорошим», а набор элементов управления Clone становится набором элементов управления, на который указывает LastKnownGood. Это подтверждается тем, что вход в систему
процесс удался. Если были нефатальные ошибки, которые вы проигнорировали или
не зная или если автоматические или ручные драйверы дают сбой после входа в систему, LastKnownGood может быть не очень «хорошим». Критерий для
создание набора элементов управления LastKnowGood справедливо
рано и несколько поверхностно.Контроль ошибок для драйверов: если служба или драйвер обнаруживают ошибку,
ядро будет действовать в зависимости от значения ErrorControl драйверов. Ядро будет
игнорировать ошибку, если ErrorControl=0; ядро выдаст предупреждение о
ошибка и продолжить загрузку, если ErrorControl=1; ядро будет паниковать, если
ErrorControl=2 и переключитесь на LastKnownGood или проигнорируйте ошибку, если установлен элемент управления.
уже LastKnownGood; и ядро пометит controlset как неудачный, если
ErrorControl=3 и переключитесь на LastKnownGood или, если это уже LastKnownGood,
ядро сгенерирует диагностику (BSOD).
режиме, а ядро находится в кольце 0. Ядро инициализирует драйверы уровня загрузки
который был загружен NTLDR. HKEY_LOCAL_MACHINESYSTEM currentcontrolset ControlServiceGroupOrder
определяет порядок инициализации диска. Ниже приведено объяснение того, как
currentcontrolset становится CurrentControlSet. На данный момент его ControlSet001, ControlSet002 или
Контролсет001. На моем ПК содержимое
Значение ServiceGroupOrder: зарезервировано системой, расширитель загрузочной шины, системная шина
Удлинитель. Минипорт SCSI, порт, основной диск, класс SCSI, класс SCSI CDROM,
фильтр, загрузочная файловая система, база, порт указателя, порт клавиатуры, класс указателя,
Класс клавиатуры, запуск видео, видео, сохранение видео, файловая система, журнал событий, потоки
Драйверы, NDIS Wrapper, PNP_TDI, NDIS, TDI, NetBIOSGroup, PlugPlay, SpoolerGroup,
NetDDEGroup, параллельный арбитр, расширенная база, RemoteValidation, PCI
Конфигурация и транзакции MS. Сложный процесс конечно. - После загрузки драйверов уровня загрузки драйверы уровня ядра в HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices
- Запустится диспетчер сеансов (smss.exe).
- выполняет программы, перечисленные в HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession
МенеджерBootExecute. Обычно это авточек авточек
* который делает chkdsk на каждом разделе диска. Это запуск на системном уровне
ключ. В случае успеха диспетчер сеансов - устанавливает файлы подкачки, определенные в HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession
МенеджерУправление памятьюФайлы подкачки. - записывает CurrentControlSet и CloneControlSet в реестр. CloneControlSet становится ControlSet00x, а позже — набором управления LastKnowGood, если вход в систему выполнен успешно.
- создает устройства DOS, определенные в HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession
Устройства ManagerDOS (AUX, MAILSLOT, NUL, PIPE, PRN, UNC). - загружает подсистемы Win32, определенные в HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession
МенеджерПодсистемы. По умолчанию используется csrss.exe, который
контролирует весь доступ к экрану.
первая подсистема Win32. - выполняет программы, перечисленные в HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession
- Подсистема Win32 запускает winlogon.exe и управляет
перемещается из части системного реестра в часть программного обеспечения,
конкретно:- HKEY_LOCAL_MACHINESoftwareMicrosoftWindows NTCurrent
- запускает локальный центр безопасности ( lsass.exe ) и
диспетчер очереди печати ( spoolss.exe ) - При нажатии alt-ctl-del появляется
ВерсияВинлогон. Винлогон - запускает локальный центр безопасности ( lsass.exe ) и
- Контроллер служб ( screg.exe ) выполняется.
Контроллер служб проходит через SYSTEMCurrentControlSetServices в поисках служб с
Старт=2 (автоматический). Таким образом, NTLDR обрабатывал драйверы с Start=0 и ядром.
обрабатывала те, у которых Start=1, а подсистема Win32 обрабатывает те, у которых Start=2.
Подсистема Win32 запускается при запуске процесса входа в систему. Вот почему во время или сразу после входа в систему вы получаете
сообщения о неисправных услугах. Загрузка сервисов сложнее, чем
загрузка драйвера, так как службы загружаются в соответствии с DependOnGroup и DependOnService
значения параллельно (это означает, что зависимости должны быть завершены до
запуск службы), тогда как драйверы, инициализированные ядром, были загружены в
серийный заказ.