Этапы построения реестра

Опубликовано: 27 Марта, 2023


Шаги загрузки реестра требуют присутствия 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 снова переключился на защиту памяти.
      режиме, а ядро находится в кольце 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
      загружены – это драйверы со значением 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).



  • Запустится диспетчер сеансов (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.
  • Подсистема Win32 запускает winlogon.exe и управляет
    перемещается из части системного реестра в часть программного обеспечения,
    конкретно:
      HKEY_LOCAL_MACHINESoftwareMicrosoftWindows NTCurrent
      ВерсияВинлогон.
      Винлогон
    • запускает локальный центр безопасности ( lsass.exe ) и
      диспетчер очереди печати ( spoolss.exe )
    • При нажатии alt-ctl-del появляется

  • Контроллер служб ( screg.exe ) выполняется.

    Контроллер служб проходит через SYSTEMCurrentControlSetServices в поисках служб с
    Старт=2 (автоматический). Таким образом, NTLDR обрабатывал драйверы с Start=0 и ядром.
    обрабатывала те, у которых Start=1, а подсистема Win32 обрабатывает те, у которых Start=2.
    Подсистема Win32 запускается при запуске процесса входа в систему. Вот почему во время или сразу после входа в систему вы получаете
    сообщения о неисправных услугах.
    Загрузка сервисов сложнее, чем
    загрузка драйвера, так как службы загружаются в соответствии с DependOnGroup и DependOnService
    значения параллельно (это означает, что зависимости должны быть завершены до
    запуск службы), тогда как драйверы, инициализированные ядром, были загружены в
    серийный заказ.