Информация при загрузке windows

When troubleshooting problems with your Windows computer, it is useful to have as much system information as possible. There are several ways to generate information about what is going on underneath the hood of your PC. And if you are experiencing startup issues, one of the most useful things to check is the boot log.

Here’s how to enable the boot log and where to find it on your Windows computer.

What Is the Windows Boot Log?

The Boot Log or System Initialization Log is a text file that can be generated during your computer’s boot sequence. It contains a list of all the drivers that are loaded during boot, as well as any expected drivers that are not loaded.

The boot log feature is disabled by default. There are two ways to enable or disable the boot log, both of which are explored below. Because you are making changes to an important part of Windows, both methods require you to be signed in as an administrator. If you do not have elevated privileges, you won’t be permitted to enable the boot log.

A Windows boot log file open in Notepad

The text file generated after you enable boot logging can be opened and read in a text editor such as Notepad. Each driver is listed separately, and either labeled as LOADED or NOT_LOADED. The folder path to each driver is also shown.

How to Enable the Boot Log With MSConfig

Using the MSConfig tool, also known as the System Configuration tool, is probably the easiest of the two methods for enabling the boot log.

  1. Open the Run dialog by searching for Run in Windows Search, or by using the Win + R shortcut.
  2. In the Run app, type msconfig and press Return. If prompted, confirm your administrator privileges.
  3. Select the Boot tab in the System Configuration app. The default OS should already be selected.
  4. Check the box next to Boot log in the Boot options section, then click Apply.
The boot options screen in msconfig on Windows

You will be prompted to restart your computer. Doing so will immediately generate the boot log. You can also exit without restarting if you need to save and close any unfinished files. In this case, the boot log will be created the next time you restart the PC.

How to Modify Boot Settings With BitLocker Enabled

Enabling the boot log is seen by Windows as editing boot settings. This will be an issue if you have BitLocker Encryption turned on for the disk where the OS is installed. Enabling the boot log and then restarting will activate BitLocker protections.

The BitLocker settings screen in Windows 10

If BitLocker is enabled, you will see a message when you apply the boot settings changes in MSConfig. The message will remind you that when you restart after making changes to boot settings, your computer will enter recovery mode. You will be required to enter a BitLocker Recovery Key or Recovery Password to continue startup.

If you see the message and do not have a BitLocker recovery key or password, do not proceed with the changes to the boot options. If you don’t know where to find it, our guide will help you locate your BitLocker Recovery Key.

How to Enable the Boot Log With Command Prompt

If you cannot access MSConfig for some reason, you can enable the boot log using Command Prompt (Elevated). This method requires a bit more work but is still simple to do if you follow the steps here.

  1. In Windows Search, type Command Prompt. Right-click on it in the results and select Run as Administrator.
  2. In the Elevated Command Prompt, type bcdedit and press Return. This generates a list of boot details.
  3. Make a note of the Identifier in the Windows Boot Loader section. This will usually be {current}.
  4. To enable the boot log, type the following: bcdedit /set {identifier} bootlog Yes. Replace identifier with the value you noted in the previous step.
  5. Type bcdedit again to check if the boot log has been enabled. It will be shown at the bottom of the list of boot information.
  6. You can then close Command Prompt and restart your PC to generate the log.
The Command Prompt showing boot log being enabled

Using the Command Prompt can be a little daunting for new Windows users, or if you have never used the tool before. It really isn’t anything to be scared of, as long as you follow the command instructions from a trusted information source like MakeUseOf. If you want to become more familiar with this useful Windows tool, check out our beginner’s guide to the Command Prompt.

Where Is the Windows Boot Log Saved?

The generated boot log file will be called ntbtlog.txt. You can find it at C:\Windows\ntbtlog.txt. If you don’t see the file at that location, ensure you have restarted the computer at least once since you enabled the boot log.

There will only be one version of the file, and each time you start up your computer with boot logging enabled, it will be overwritten. To prevent this, you can move a generated log to your desktop or elsewhere on your computer. This allows you to compare boot logs from different times. You will need to confirm administrator privileges before you can move the boot log out of the Windows folder.

How to Disable the Boot Log

After completing your troubleshooting with the boot log, there is no need to keep it enabled. You can disable the boot log by simply reversing the processes shown above.

  • Run MSConfig and select the Boot tab. Uncheck the box next to Boot log in the Boot options section. Then click Apply.
  • Open an Elevated Command Prompt, and then type: bcdedit /set {identifier} bootlog No. Replacing identifier with the one you used previously, e.g. {current}.

You can use either method to disable the boot log, even if it is a different method from the one you used to enable it.

Troubleshoot Startup Issues With the Windows Boot Log

Enabling the boot log in Windows allows you to see a text list of every driver that is loaded and not loaded during the boot process. This can be very useful for troubleshooting startup issues and also problems with apps and services not working properly after startup.

Инженеры Microsoft реализовали в Windows хранилище загрузки, известное ещё как Boot Configuration Data (BCD), и меню загрузки. Первое содержит в себе идентификаторы загрузчиков всех имеющихся на ПК операционных систем, а второе считывает их и выводит в виде перечня ОС, доступных для запуска. Это значительно облегчает жизнь пользователю, на компьютере которого стоит несколько систем. Ему не нужно что-то мудрить, чтобы переключиться между ними. Достаточно перезагрузить компьютер и выбрать нужную из представленного списка. Как и другие части ОС Windows, меню загрузки поддаётся настройке. В этом руководстве перечислены доступные способы редактирования данного раздела.

Примечание: практически все действия, описанные в этом руководстве, нужно выполнять из-под учётной записи с правами администратора. В противном случае вы должны знать пароль от неё.

Редактирование меню загрузки Windows 10 в окне загрузчика

Меню загрузки Windows 10 обладает небольшим разделом настроек. Он предоставляет минимальный набор опций — изменение значения таймера автоматического запуска основной системы, смена ОС, загружаемой по умолчанию, а также дополнительный раздел с режимами старта системы и функцией выключения компьютера.

  1. Чтобы получить доступ к этим настройкам, вам нужно нажать на пункт Изменить значения по умолчанию или выбрать другие параметры во время отображения экрана со списком доступных для запуска систем.
    Windows 10-2017-04-20-11-31-53

  2. Далее вам остаётся нажать на пункт Изменить таймер, чтобы установить время отсрочки автоматической загрузки системы (5 и 30 секунд, а также 5 минут) или же на Выбрать ОС по умолчанию, чтобы указать, какую систему стоит грузить по завершению таймаута.
    Windows 10-2017-04-20-11-32-07

Редактирование меню загрузки Windows 10 в параметрах системы

В дополнительных параметрах системы, зайти в которые можно через свойства ОС, находится раздел Загрузка и восстановление. Он хранит в себе небольшой список функций для редактирования меню загрузки, который подойдёт нетребовательным пользователям. Так с его помощью вы можете выбрать, какая операционная система будет загружаться по умолчанию, выставить время отображения списка установленных систем или вовсе выключить таймаут, а также активировать вывод вариантов восстановления.

Edit-Boot-Mgr

Чтобы попасть в указанный раздел, вам нужно сделать следующее:

  1. Нажмите на сочетание Win + Pause (Break).
  2. Кликните по ссылке Дополнительные параметры системы, расположенную в левой части окна.
    Edit-Boot-Mgr-1

  3. Под заголовком Загрузка и восстановление щёлкните на кнопку Параметры.
    Edit-Boot-Mgr-2

Редактирование меню загрузки Windows 10 в Конфигурация системы

Если вам необходимо немного больше возможностей по настройке, вы можете попробовать утилиту Конфигурация системы. Помимо упомянутых настроек, она предлагает функцию удаления загрузочных записей операционных систем, опцию для вывода информации об ОС, возможность запустить Windows без графической оболочки, выбрать параметры загрузки безопасного режима и ещё несколько второстепенных функций.

Отредактировать меню загрузки с помощью Конфигурация системы можно следующим образом:

  1. Нажмите Win + R и введите msconfig. Появится окно утилиты.
    Edit-Boot-Mgr-3

  2. Откройте вкладку Загрузка.
    Edit-Boot-Mgr-4

  3. Выберите из списка интересующую вас запись. Если вы желаете избавиться от неё, нажмите на кнопку Удалить.
    Edit-Boot-Mgr-5

  4. Хотите пометить ОС в качестве основной? Кликните по кнопке Использовать по умолчанию.
    Edit-Boot-Mgr-6

  5. В случае необходимости, установите предпочитаемое время таймаута.
    Edit-Boot-Mgr-7

  6. Нажмите на ОК и перезагрузите компьютер, чтобы система применила изменения.
    Edit-Boot-Mgr-8

Как отредактировать меню загрузки Windows 10 с помощью EasyBCD

EasyBCD — бесплатная утилита, предоставляющая широкий выбор возможностей для редактирования меню загрузки. В сравнении с ней все стандартные системные инструменты (кроме Командной строки) смотрятся весьма примитивно.

Эта компактная программа позволяет:

  • Удалять ОС из списка доступных для запуска.
  • Добавлять новые записи Windows (в том числе и устаревших), Linux / BSD, Mac.
  • Добавлять записи для установки систем с помощью ISO-образов или отдельных разделов жёсткого диска.
  • Переименовывать записи операционных систем.
  • Выставлять систему по умолчанию.
  • Изменять положение записей в списке.
  • Устанавливать язык меню загрузки.
  • Выбирать оболочку интерфейса загрузчика (Metro или более раннюю от Windows Vista / 7).
  • Выставлять длительность таймаута.
  • Архивировать и восстанавливать настройки хранилища загрузки (BCD).
  • Просматривать содержимое BCD и меню загрузки.

Интерфейс программы полностью локализован на русский, а сама она достаточно простая в использовании и не требует от пользователя никаких сверхъестественных способностей.

Как добавить запись системы в меню загрузки

  1. Скачайте и установите EasyBCD. Во время установки укажите, что вы будете использовать программу в личных целях, а не в коммерческих.
    Примечание: для редактирования меню загрузки в старших версиях Windows может понадобиться EasyBCD 1.7.2.
  2. Запустите программу и выберите язык интерфейса.
  3. Нажмите на Добавить запись и выберите вкладку Windows.
    Edit-Boot-Mgr-9

  4. Напротив пункта Тип выберите Vista / 7 / 8 / 10. Если добавляемая запись должна загружать более старую версию «винды», разверните выпадающий список и кликните по подходящему варианту.
    Edit-Boot-Mgr-10

  5. В поле Имя укажите предпочитаемое название записи.
    Edit-Boot-Mgr-11

  6. Напротив пункта Диск откройте список разделов жёсткого диска и выберите тот, где установлена ОС, к которой вы хотите восстановить доступ.
    Edit-Boot-Mgr-12

  7. Нажмите на Добавить.
    Edit-Boot-Mgr-13

Как удалить запись системы из меню загрузки

  1. В программе нажмите на Редактировать меню загрузки.
    Edit-Boot-Mgr-14

  2. Из списка записей выберите нужную и нажмите на Удалить. Подтвердите своё действие.
    Edit-Boot-Mgr-15

  3. Кликните по кнопке Сохранить.
    Edit-Boot-Mgr-16

Как переименовать запись системы в меню загрузки

  1. В разделе редактирования загрузочного меню кликните по записи, имя которой вы хотите сменить.
    Edit-Boot-Mgr-17

  2. Нажмите на кнопку Переименовать и введите новое название.
    Edit-Boot-Mgr-18

  3. Сохраните данное изменение.
    Edit-Boot-Mgr-19

Как переместить запись системы в меню загрузки

  1. Выберите из списка пункт, позицию которого нужно сменить.
    Edit-Boot-Mgr-20

  2. Используя кнопки Вверх и Вниз измените положение в списке.
    Edit-Boot-Mgr-21

  3. Нажмите на Сохранить.
    Edit-Boot-Mgr-22

Как выбрать систему для загрузки по умолчанию

  1. В столбце По умолчанию установите галочку напротив нужной операционной системы.
    Edit-Boot-Mgr-23

  2. Сохраните изменения.
    Edit-Boot-Mgr-24

Как изменить время отображения меню загрузки

  1. Возле пункта Таймаут нажмите на поле и введите оптимальное для вас время. Учтите, что в меню загрузки оно измеряется в секундах.
    Edit-Boot-Mgr-25

  2. После внесения изменений кликните по кнопке Сохранить.
    Edit-Boot-Mgr-26

Как изменить язык меню загрузки

  1. Найдите пункт Язык, разверните список возле него и выберите нужное вам наречие.
    Edit-Boot-Mgr-27

  2. Сохраните внесенные изменения.
    Edit-Boot-Mgr-28

Как отредактировать меню загрузки Windows 10 с помощью командной строки

Если вы не доверяете сторонним программам и стараетесь пользоваться исключительно системными инструментами, тогда вам стоит опробовать способы редактирования меню загрузки Windows 10 с помощью командной строки.

Создание или восстановление резервной копии хранилища загрузки Windows

Перед выполнением всех действий создайте резервную копию хранилища загрузки, чтобы вы могли восстановить его в случае необходимости. Создать бекап BCD вы можете следующим образом:

  1. На любом не системном разделе создайте папку BCDBackup.
    Edit-Boot-Mgr-29

  2. Запустите командную строку с правами администратора. Для этого нажмите на Win + S, введите Командная строка, кликните правой кнопкой мышки по результату и выберите Запустить от имени администратора.
  3. Введите команду bcdedit /export E:\BCDBackup\BCD, где E — буква раздела, на котором находится созданная ранее папка.
    Edit-Boot-Mgr-31

  4. Для восстановления рабочей копии BCD вам нужно ввести bcdedit /import E:\BCDBackup\BCD, где Е — буква раздела, содержащего каталог с резервной копией хранилища загрузки.
    Edit-Boot-Mgr-32

Как добавить запись системы в меню загрузки

  1. Всё в ту же командную строку, запущенную от имени администратора, введите bcdedit /copy {current} /d «Windows OS», где Windows OS — произвольное название новой записи. В результате вы должны получить сообщение об успешном копировании существующей записи в новую, а также её уникальный идентификатор.
    Edit-Boot-Mgr-33

  2. Далее наберите bcdedit /set {ИД} device partition=E:, где ИД — идентификатор новой записи, созданной в процессе выполнения предыдущего пункта, а Е — буква локального диска, на котором расположены файлы другой операционной системы. Чтобы не допустить ошибку при вводе длинного ID, скопируйте его в эту команду вместе с фигурными скобками.
    Edit-Boot-Mgr-34

  3. Следом введите bcdedit /set {ИД} osdevice partition=E:, где ИД — код созданной записи, а E — буква раздела, содержащего системные файлы другой ОС.
    Edit-Boot-Mgr-35

  4. В конце всего этого процесса введите команду bcdedit /displayorder {ИД} /addlast, где ИД — код ранее созданной записи операционной системы. Эта команда должна добавить новую запись в самый низ списка ОС, доступных для запуска из меню загрузки.
    Edit-Boot-Mgr-36

Как удалить запись системы из меню загрузки

  1. Введите команду bcdedit, чтобы получить список всех записей установленных ОС. Обратите внимание на пункт displayorder в разделе Диспетчер загрузки Windows. В нём перечислены уникальные коды всех операционных систем. Их порядок точно такой же, как и пунктов установленных систем в меню загрузки.
    Edit-Boot-Mgr-37

  2. Наберите команду bcdedit /delete {ИД}. Вместо ИД вам нужно вставить код записи, которую собираетесь удалить. Его вы можете получить из пункта displayorder. Данная команда уберёт запись не только из диспетчера загрузок, но и из хранилища. Если нужно удалить запись с именем (к примеру, {default}), а не в виде комбинации букв и цифр, тогда команда должна выглядеть так: bcdedit /delete {ИД} /f. Как и во всех остальных случаях, на место ИД нужно вставить идентификатор.
    Edit-Boot-Mgr-38

  3. Если вы желаете лишь на время исключить её из списка, тогда выполните команду bcdedit /displayorder {ИД} /remove. Запись исчезнет из него, но при этом останется в хранилище, что позволит при необходимости восстановить её.
    Edit-Boot-Mgr-39

Как изменить порядок отображения систем в меню загрузки

Для редактирования положения записей в загрузчике используйте команду bcdedit /displayorder {ИД2} {ИД1} {ИД3}. Вместо всех ИД укажите реальные коды записей в той последовательности, в которой вы хотите видеть их во время запуска компьютера.

Edit-Boot-Mgr-40

Как выбрать систему для загрузки по умолчанию

Всё, что вы должны сделать, это выполнить команду bcdedit /default с указанием кода системы в фигурных скобках.

Edit-Boot-Mgr-41

Как переименовать систему в меню загрузки

Для изменения названия операционной системы используйте команду bcdedit /set {ИД} description «Новое имя».

Edit-Boot-Mgr-42

Как изменить время отображения меню загрузки

Чтобы установить оптимальное время отображения меню загрузки наберите команду bcdedit /timeout time, где time — время таймаута в секундах.

Edit-Boot-Mgr-43

Вот, собственно, и все основные способы редактирования меню и хранилища загрузки в операционной системе Windows 10.

Мы продолжаем разбираться как работает ПК на примере клавиатуры и Windows 10. В этой статье поговорим о том как происходит единение софта и железа.

Старт системы

Полностью компьютер выключен когда он отключен от питания и конденсаторы на материнской плате разрядились. До эры смартфонов мобильные телефоны часто глючили и если перезагрузка не лечила проблему, то приходилось доставать батарею и ждать 10 секунд, потому что сбрасывалось программное состояние ОС, в то время как чипы на материнской плате и контроллеры устройств оставались активными сохраняя состояние, драйвера ОС к ним просто реконнектились. 10 секунд — время на разрядку конденсаторов, состояние чипов сбрасывается только при полном отключении.
Если же ПК подключен к розетке или батарее, то он находится в режиме Stand-By, это значит что по шине питания подаётся маленькое напряжения (5В) от которого запитываются некоторые чипы на материнке. Как минимум это системный контроллер, по сути это мини-компьютер запускающий большой компьютер. Получив уведомление о нажатии кнопки Power он просит блок питания/батарею подать больше напряжения и после инициализирует весь чип-сет, в том числе и процессор. Инициализация включает в себя перекачку кода и данных прошивки материнки (BIOS/UEFI) в оперативную память и настройку CPU на её исполнение.
Думать что кнопка Power это рубильник который подаёт электричество на CPU и тот начинает исполнять с заранее известного адреса прошивку BIOS неправильно. Возможно старые компьютеры так и работали. Кнопка включения находится на своей плате, вместе со светодиодами состояний и к материнке она подключается через специальный разъём. На картинке ниже видны контакты для кнопки Power, Reset, а также светодиодов с состоянием Power и чтения жёсткого диска. Нажатие кнопки включения переводится в сигнал на контакты материнки, откуда он достигает системный контроллер.

Контакты на материнке для подключения кнопки включения, светодиодов состояния Power, жёсткого диска и динамиков.

Плата ноутбука с кнопкой включения и светодиодом состояния

Cистемный контроллер обладает огромными полномочиями – включать и выключать компьютер, исполнять код в режиме ядра. Помимо него могут быть и другие чипы со сравнимыми возможностями, такие как Intel Management Engine или AMD Secure Technology (часть CPU), которые так же работают когда компьютер «выключен». Чип с Intel ME имеет в себе x86 CPU с операционной системой MINIX 3. Что он может делать:

  1. Включать и выключать компьютер, т.е. выполнять программы имея доступ ко всей вычислительной мощности, периферии машины и сети.
  2. Обходить ограничения файервола.
  3. Видеть все данные в CPU и RAM, что даёт доступ к запароленным файлам.
  4. Красть ключи шифрования и получать доступ к паролям
  5. Логировать нажатия клавиш и движения мыши
  6. Видеть что отображается на экране
  7. Вредоносный код в Intel ME не может быть детектирован антивирусом, потому как на такой низкий уровень он добраться не может
  8. И конечно же скрытно отправлять данные по сети используя свой стек для работы с сетью.

Это вызывает серьёзные вопросы безопасности, потому как он может быть хакнут или использовать в шпионских целях.

Прикладная иллюстрация как блок питания получает сигнал от материнки на включение. Если вы задумаете установить мощную видеокарту (Nvidia 2070 S) на офисный ПК, то просто вставить её недостаточно, потому как она требует питание в 600W, в то время как такой ПК имеет блок на ~500W. Первое что придёт в голову – купить новый блок питания на 650W с отдельной линией для видеокарты. Но и здесь будут разочарования, потому как разъёмы материнки будут не совпадать с разъёмами БП, а если его отдельно воткнуть в розетку и подключить к видюхе тоже ничего не будет – в блоке питания вентилятор не крутится и изображения нет. Так происходит, потому что БП должен получить сигнал от материнки на полное включение. Очевидное решение – новая материнка с совместимыми разъёмами, однако она стоит ~$300. Есть решение проще, хоть оно и вызывает опасения пожаробезопасности. Берём скрепку, разгибаем и вставляем в зелёный (PS_ON) и один из чёрных пинов (COM). Теперь всё должно работать.

Поиск загрузчика ОС

Есть два вида прошивки материнки – BIOS (Basic Input Output System) на старых машинах и UEFI (Unified Extensible Firmware Interface) на новых. Windows 10 поддерживает обе и абстрагирует различия между ними. UEFI правильней называть ОС чем прошивкой, потому как он предлагает больше возможностей, к примеру богатый графический интерфейс вместо текстового, наличие мышки, больший объём доступной памяти, улучшенная модель безопасности и валидации файлов ОС, взаимодействие с железом через API, вместо прерываний как в BIOS.

Пример экрана монитора BIOS.

Программа BIOS хранится на отдельном чипе, подключенном к Южному мосту. Этот чип можно достать и перепрошить новой программой, по факту это просто носитель памяти, а не самостоятельный микрокомпьютер.

Настройки BIOS (системное время, например), хранятся на другом чипе который как правило находится возле круглой батарейки, которая на самом деле является литиевым аккумулятором, подзаряжающимся во время работы ПК. Называется он CMOS, что означает Complementary Metal Oxide Semiconductor, а по-русски просто — КМОП, что есть комплементарная структура металл-оксид-полупроводник.

Первым делом программа BIOS выполняет проверку подсистем, эта процедура называется POST – Power On Self Test. Тест может быть сокращённый либо полный, это задаётся в настройках BIOS. Процитирую Википедию, что в себя включают эти тесты:
Сокращённый тест включает:

  1. Проверку целостности программ BIOS в ПЗУ, используя контрольную сумму.
  2. Обнаружение и инициализацию основных контроллеров, системных шин и подключённых устройств (графического адаптера, контроллеров дисководов и т. п.), а также выполнение программ, входящих в BIOS устройств и обеспечивающих их самоинициализацию.
  3. Определение размера оперативной памяти и тестирования первого сегмента (64 килобайт).

Полный регламент работы POST:

  1. Проверка всех регистров процессора;
  2. Проверка контрольной суммы ПЗУ;
  3. Проверка системного таймера и порта звуковой сигнализации (для IBM PC — ИМС i8253 или аналог);
  4. Тест контроллера прямого доступа к памяти;
  5. Тест регенератора оперативной памяти;
  6. Тест нижней области ОЗУ для проецирования резидентных программ в BIOS;
  7. Загрузка резидентных программ;
  8. Тест стандартного графического адаптера (VGA или PCI-E);
  9. Тест оперативной памяти;
  10. Тест основных устройств ввода (НЕ манипуляторов);
  11. Тест CMOS
  12. Тест основных портов LPT/COM;
  13. Тест накопителей на гибких магнитных дисках (НГМД);
  14. Тест накопителей на жёстких магнитных дисках (НЖМД);
  15. Самодиагностика функциональных подсистем BIOS;
  16. Передача управления загрузчику.

По результатам этого теста может быть обнаружена неисправность, к примеру нерабочая видеокарта или клавиатура. Поскольку экран монитора может не работать результаты тестов сообщаются в виде последовательности звуковых сигналов разной высоты. Что конкретно они значат надо смотреть в документации к материнской плате. Старые компьютеры часто бибикали во время старта — это программа BIOS сообщала о результатах тестов. Иногда может дополнительно использоваться индикатор, показывающий номер ошибки.

Если всё прошло успешно, BIOS начинает процесс поиска загрузчика ОС. Для этого он начинает просматривать все подключенные к материнской плате жёсткие диски. Данные на физических дисках адресуются в единицах называемых сектор, обычно он 512 байт, однако современный стандарт – 4096 байт. Установщик Windows в самый первый сектор на диске записывает специальный программный код и данные о разделах. Этот сектор называется Master Boot Record. Диск разбивается на разделы (partitions), отформатированный своей файловой системой. Максимум 4 раздела, каждый из который может быть расширенным (extended partition), такой можно рекурсивно делить на 4 раздела и теоретически их число не ограничено. Как только BIOS находит Master Boot Record он считывает оттуда код и передаёт ему управление. Этот код поочередно просматривает данные о разделах и находит тот который помечен как активный, в нём находится код загрузчика Windows (Это не раздел с C:\Windows\System32!), этот раздел называется system partition. Как правило он занимает 100Мб и скрыт от пользователя. В первом секторе этого раздела хранится загрузочный код, которому передаётся управление. Это volume boot sector, код в нём ищет файл Bootmgr, с которого и начинается процесс загрузки Windows. Файл Bootmgr создан через соединение в один файлов Startup.com и Bootmgr.exe.

Процессор начинает свою работу в режиме который называется «Реальный». Это режим совместимости, в нём CPU работает так же как и старые 16-bit процессоры, не имевшие поддержки виртуальной памяти и работавшие напрямую с физической памятью через 20-bit шину адресов, позволявшую адресовать 1Мб памяти. Простые MS-DOS программы выполнялись в этом режиме и имели расширение .COM. Первое что делает Startup.com (Bootmgr) – переключает процессор в режим «Защищённый», где под защитой понимается защита процессов друг от друга. В этом режиме поддерживается виртуальная память и 32х битные адреса, которыми можно адресовать 4Гб оперативной памяти. Следующим этапом Bootmgr заполняет таблицу виртуальных адресов на первые 16Мб RAM и включает трансляцию с виртуальных адресов в физические. В этом режиме и работает Windows. Поскольку на этом этапе подсистемы ОС ещё не созданы, Bootmgr имеет свою простую и неполную реализацию файловой системы NTFS, благодаря которой он находит BCD файл (Boot Configuration Data), в котором хранятся настройки параметров загрузки ОС. Вы можете редактировать его через утилиту BcdEdit.exe. В этих настройках BCD может быть указано, что Windows была в состоянии гибернации, и тогда Bootmgr запустит программу WinResume.exe, которая считывает состояние из файла Hyberfil.sys в память и перезапускает драйвера. Если BCD говорит, что есть несколько ОС, то Bootmgr выведет на экран их список и попросит пользователя выбрать. Если ОС одна, то Bootmgr запускает WinLoad.exe, этот процесс и выполняет основную работу по инициализации Windows:

  1. Выбирает соотвествующую версию ядра Windows. Можете думать о нём как о Windows10.exe, хотя на самом деле он называется NtOsKrnl.exe. Какие есть версии? Согласно википедии:
    • ntoskrnl.exe — однопроцессорное ядро Windows. без поддержки режима PAE
    • ntkrnlmp.exe (англ. NT Kernel, Multi-Processor version) — многопроцессорное ядро Windows. без поддержки режима PAE
    • ntkrnlpa.exe — однопроцессорное ядро Windows с поддержкой режима PAE.
    • ntkrpamp.exe — многопроцессорное ядро Windows с поддержкой режима PAE.

  2. Загружает HAL.dll (Hardware Abstraction Layer), который абстрагирует особенности материнки и CPU.
  3. Загружает файл шрифтов vgaoem.fon
  4. Загружает файлы в которых содержится инфомрация о представлениях даты времени, форматов чисел и пр. Эта функциональность называется National Language System.
  5. Загружает в память реестр SYSTEM, в нём содержится информация о драйверах которые надо загрузить. Информация о всех драйверах находится в HKLM\SYSTEM\CurrentControlSet\Services\. Драйвера которые надо загрузить имеют ключ start = SERVICE_BOOT_START (0). Об устройстве реестра мы поговорим в другой статье.
  6. Загружает драйвер файловой системы для раздела на котором располагаются файлы драйверов.
  7. Загружает драйвера в память, но пока не инициализирует их из-за круговых зависимостей.
  8. Подготавливает регистры CPU для выполнения ядра Windows выбранного на первом шаге – NtOsKrnl.exe.

Во время загрузки драйверов WinLoad проверяет их цифровые подписи и если они не совпадают, то будет синий (BSOD) или зелёный (GSOD, для insider preview сборок) «экран смерти».

Запуск на UEFI

Пример экрана загрузки UEFI

BIOS существует больше 30 лет и в попытках исправить его недостатки компания Intel в 1998 году создала стандарт Intel Boot Initiative, позже переименованный в EFI и в 2005 году пожертвованный организации EFI Forum. Недостатки BIOS:
• Работает только в 16-битном режиме
• Может адресовать только 1Mb оперативной памяти
• Часто имеет проблемы совместимости
• MBR ограничен только четырьмя главными разделами диска
• Диск с ОС не может быть больше чем 2.2Tb.
• Имеет очень ограниченные возможности для валидации загрузчика ОС.
На смену BIOS пришёл UEFI, по сути это миниатюрная ОС которая может работать и в 32-bit и в 64-bit. Для совместимости есть опция Compatibility Support Module, которая включается в настройках и эмулирует работу BIOS.

В UEFI загрузка происходит в родной для процессора битности – 32 или 64, есть доступ ко всей памяти, поддерживается виртуальная память, включен Secure Boot и есть возможность запустить antimalware до начала загрузки ОС. Порядок загрузки ОС в UEFI:

  1. Инициализация и запуск Firmware, запуск чип-сета.
  2. POST тест, аналогично BIOS
  3. Загрузка EFI-драйверов и поиск диска подпадающего под требования EFI для загрузочного диска
  4. Поиск папки с именем EFI. Спецификация UEFI требует чтобы был раздел для EFI System Partition, отформатированный под файловую систему FAT, размером 100Мб – 1Гб или не более 1% от размера диска. Каждая установленная Windows имеет свою директорию на этом разделе – EFI\Microsoft.

  5. Читает из настроек UEFI сохранённых в NVRAM (энергонезависимая память) путь к файлу загрузчика.
  6. Находит и запускает EFI/Microsoft/Boot/BootMgrFw.efi.
  7. BootMgrFw.efi находит раздел реестра BCD, который хранится в отдельном файле с именем BCD. Из него он находит WinLoad.efi, который расположен в C:\Windows\System32\winload.efi.

Чтобы посмотреть содержимое раздела EFI System Partition откройте консоль с правами админа (WinKey+X => Windows PowerShell (Admin)) и выполните команды mountvol Z: /s, Z:, dir. CD — меняет директорию.
Главное отличие компонентов BootMgr и WinLoad для UEFI от своих копий для BIOS тем что они используют EFI API, вместо прерываний BIOS и форматы загрузочных разделов MBR BIOS и EFI System Partition сильно отличаются.

Инициализация ядра

Напоминаю, что мы рассматриваем загрузку ПК в контексте работы клавиатуры, поэтому не стоит заострять внимание на всех этапах. Надо понять где в этом процессе находится клавиатура, важные для понимания этапы выделены.
На предыдущем этапе был запущен компонент WinLoad.exe/WinLoad.efi, который запускает NtOsKrnl.exe указав ему параметры загрузки в глобальной переменной nt!KeLoaderBlock (память режима ядра доступна всем процессам), которые WinLoad собрал во время своей работы. Они включают:

  1. Пути к System (загрузчик Windows) и Boot (C:\Windows\System32) директориям.
  2. Указатель на таблицы виртуальной памяти которые создал WinLoad
  3. Дерево с описанием подключенного hardware, оно используется для создания HKLM\HARDWARE ветки реестра.
  4. Копия загруженного реестра HKLM\System
  5. Указатель на список загруженных (но не инициализированных) драйверов участвующих в старте Windows.
  6. Прочая информация необходимая для загрузки.

Инициализация ядра Windows происходит в два этапа. До этого происходит инициализация Hardware Abstraction Layer, который в числе всего прочего настраивает контроллеры прерывания для каждого CPU.
На этой же стадии загружаются в память строки с сообщениями для BSOD, потому как в момент падения они могут быть недоступны или повреждены.

  • Первая фаза инициализации ядра:
    1. Слой Executive инициализирует свои объекты состояний – глобальные объекты, списки, блокировки. Производится проверка Windows SKU (Stock Keeping Unit), примеры Windows 10 SKU — Home, Pro, Mobile, Enterprise, Education.
    2. Если включен Driver Verifier, то он инициализируется.
    3. Менеджер памяти создаёт структуры данных, необходимые для работы внутренних API для работы с памятью (memory services), резервирует память для внутреннего пользования ядром.
    4. Если подключен отладчик ядра (kernel debugger) ему отправляется уведомление загрузить символы для драйверов загружаемых во время старта системы.
    5. Инициализируется информация о версии билда Windows.
    6. Старт Object Manager – позволяет регистрировать именованные объекты к которым могут получать доступ по имени другие компоненты. Яркий пример – мьютекс по которому приложение позволяет запустить единственный экземпляр. Здесь же создаётся храниться handle table, по которой устанавливается соответствие к примеру между HWND и объектом описывающим окно.
    7. Старт Security Reference Monitor подготавливает всё необходимое для создания первого аккаунта.
    8. Process Manager подготавливает все списки и глобальные объекты для создания процессов и потоков. Создаются процесс Idle и System (в нём исполняется “Windows10.exe” он же NtOsKrnl.exe), они пока не исполняются, потому как прерывания выключены.
    9. Инициализация User-Mode Debugging Framework.
    10. Первая фаза инициализации Plug and Play Manager. PnP – это стандарт который реализовывается на уровне производителей периферии, материнских плат и ОС. Он позволяет получать расширенную информацию о подключенных устройствах и подключать их без перезагрузки ПК.

  • Вторая фаза инициализации ядра. Она содержит 51 шаг, поэтому я пропущу многие из них:
    1. По завершению первой фазы главный поток процесса System (NtOsKrnl.exe) уже начал исполнение. В нём производится вторая фаза инициализации. Поток получает самый высокий приоритет – 31.
    2. HAL настраивает таблицу прерываний и включает прерывания.
    3. Показывается Windows Startup Screen, которая по умолчанию представляет из себя чёрный экран с progress bar.
    4. Executive слой инициализирует инфраструктуру для таких объектов синхронизации как Semaphore, Mutex, Event, Timer.
    5. Объекты для User-Mode Debugger проинициализированы.
    6. Создана symbolic link \SystemRoot.
    7. NtDll.dll отображена в память. Она отображается во все процессы и содержит Windows APIs.
    8. Инициализирован драйвер файловой системы.
    9. Подсистема межпроцессного общения между компонентами Windows ALPC проинициализирована. Можете думать о ней как о named pipes или Windows Communication Foundation для межпроцессного общения.
    10. Начинается инициализация I/O Manager, который создаёт необходимые структуры данных для инициализации и хранения драйверов подключенной к компьютеру периферии. Этот процесс очень сложный.
      Здесь же инициализируются компоненты Windows Management Instrumentation и Event Tracing for Windows (на него полагается Windows Performance Analyzer). После этого шага все драйвера проинициализированы.
    11. Запускается процесс SMSS.exe (Session Manager Sub System). Он отвечает за создание режима пользователя, в котором будет создана визуальная часть Windows.

Запуск подсистем – SMSS, CSRSS, WinInit

SMSS.exe отличается от пользовательских процессов, это нативный процесс и это даёт ему дополнительные полномочия. SMSS.exe работает с ядром в обход Windows API, он использует то что называется Native API. Windows API – обёртка вокруг Native API. SMSS.exe первым делом запускает подсистему Windows (CSRSS.exe – Client Server Runtime Sub System) и заканчивает инициализацию реестра.

Процесс и потоки SMSS.exe помечены как критические, это значит что если они неожиданно завершаться, к примеру из-за ошибки, это приведёт к падению системы. Для общения с подсистемами, к примеру вызову API создающему новую сессию, SMSS создаёт ALPC-порт с именем SmApiPort. Загружаются из реестра переменные среды окружения, запускаются программы такие как Check Disk (autochk.exe, эти программы записаны в реестре HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\BootExecute). SMSS.exe запускается для каждой пользовательской сессии. Глобальные переменные (очередь сообщений например) у каждой сессии своя за счёт механизма виртуальной памяти. В Windows есть контексты потока, процесса и сессии. Каждый SMSS.exe запускает свой экземпляр подсистемы, на данный момент это только CSRSS.exe (Windows), в прошлом поддерживались операционные системы OS/2 (os2ss.exe) и POSIX (psxss.exe), но эта идея была неудачной. Самый первый SMSS.exe засыпает в ожидании процесса WinInit.exe. Остальные экземпляры вместо этого создают процесс WinLogon который показывает UI для входа.

WinInit.exe инициализирует подсистемы для создания графической оболочки – Windows Station и десктопы, это не тот рабочий стол который вы видите, это иная концепция Windows. Далее он запускает процессы:

  1. Services.exe Services Control Manager (SCM) запускает сервисы и драйвера помеченные как AutoStart. Сервисы запускаются в процессах svchost.exe. Есть утилита tlist.exe, которая запущенная с параметром tlist.exe -s напечатает в консоли имена сервисов в каждом из svchost.exe.
  2. LSASS.exe – Local System Authority.
  3. LSM.exe – Local Session Manager.

WinLogon.exe – загружает провайдеры аутентификации (credential providers), которые могут быть password, Smartcard, PIN, Hello Face. Он порождает процесс LogonUI.exe который и показывает пользователю интерфейс для аутентификации, а после валидирует введённые данные (логин и пароль, PIN).

Если всё прошло успешно, то WinLogon запускает процесс указанный в ключе реестра HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinLogon\Userinit. По умолчанию это процесс UserInit.exe, который:

  1. Запускает скрипты указанные в реестрах:
    • HKCU\Software\Policies\Microsoft\Windows\System\Scripts
    • HKLM\SOFTWARE\Policies\Microsoft\Windows\System\Scripts
  2. Если групповая политика безопасности определяет User Profile Quota, запускает %SystemRoot%\System32\Proquota.exe
  3. Запускает оболочку Windows, по умолчанию это Explorer.exe. Этот параметр конфигурируется через реестр:
    • HKCU\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell
    • HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell

WinLogon уведомляет Network Provider о залогинившемся пользователе, на что тот восстанавливает и подключает системные диски и принтеры сохранённые в реестре. Network Provider представляет из себя файл mpr.dll из системной папки, который хостится в процессе svchost.exe, т.е. сервис Windows.

Дерево процессов выглядит следующим образом, на нём можно увидеть кто и кого создал (показаны не все процессы, может немного отличаться от последний версий Windows).

Где здесь клавиатура?

Во время запуска ядро Windows считывает из реестра информацию о контроллере системной шины, как правило это шина PCI (реже MSI), к ней подключены контроллеры портов ввода-вывода, в том числе и USB, PS/2. Информация о нём записывается во время установки Windows. Система загружает для него драйвер и рекурсивно обходит все порты так же загружая для каждого из них свой драйвер. Драйвера могут комбинироваться в узлы (driver node), к примеру драйвер клавиатуры, будет соединён с драйвером порта PS2. А вот порт USB сложнее — сначала драйвер порта, потом драйвер для работы с протоколом HID и только потом клавиатура.

Каждый порт контроллируется своим чипом, который мониторит подключение, принимает/отправляет сигналы между CPU и устройством. Если чип-сет Южный мост не встроен в CPU, как это часто делают в ноутбуках, а существует отдельным чипом на материнке, то правильней говорить: сигнал между Южным мостом и контроллером порта. Чип контроллирующий порт имеет выделенную линию с контроллером прерываний (PIC или APIC), по которой он может попросить обратить на себя внимание CPU, к примеру считать данные от клавиатуры (порт PS/2, с USB другая история). Поскольку ОС загрузила для порта драйвер, она может отдавать ему команды, читать и отправлять данные. В нашем примере был загружен драйвер из C:\Windows\System32\i8042prt.sys. Давайте вспомним предыдущую статью. В старых компьютерах с PIC на чипе Intel 8259 было 15 линий прерываний, где клавиатура была подключена к ножке IRQ1, таймер IRQ0, а мышка к IRQ12, который на самом деле был пятой ножкой второго чипа 8259, который мультиплексировал свои прерывания через ножку IRQ2 первого контроллера. В современных PIC могут быть 255 контактов для сигналов прерываний. Во время загрузки ОС программирует APIC/PIC возвращать определённое число когда скажем пришло прерывание от порта клавиатуры или USB и по этому номеру CPU находит в таблице векторов прерываний функцию которую надо выполнить. Номер прерываний определяют HAL и Plug’n’Play Manager. Контроллер прерываний ищет сигнал на своих ножках в определённом порядке, к примеру в бесконечном цикле проверяет напряжение на ножках от 1 до MAX_PIN. Этот порядок определяет приоритет, к примеру клавиатура будет замечена раньше мышки, а таймер раньше клавиатуры. Чтобы не зависеть от особенностей работы контроллеров прерываний Windows абстрагирует концепцию IRQ (Interrupt Request) в IRQL (Interrupt Request Level). Будь у контроллера прерываний хоть 15 хоть 255 линий они все будут отображены на 32 IRQL для x86 и 15 IRQL для x64 и IA64.

Что означают приоритеты IRQL:

  1. High – когда происходит краш системы, обычно это вызов функции KeBugCheckEx.
  2. Power Fail – не используется. Изначально был придуман для Windows NT.
  3. Interprocessor Interrupt – нужен отправить запрос другому CPU на мультипроцессорной системе выполнить действие, например обновить TLB cache, system shutdown, system crash (BSOD).
  4. Clock – нужен чтобы обновлять системные часы, а так же вести статистику сколько времени потоки проводят в режиме пользователя и ядра.
  5. Profile – используется для real-time clock (local APIC-timer) когда механизм kernel-profiling включен.
  6. Device 1 … Device N – прерывания от устройств I/O. Во время прерывания данные от клавиатуры, мыши и других устройств считываются в отдельные буфера и сохраняются в объектах типа DPC (Deferred Procedure Call), чтобы обработать их позже и дать возможность устройствам переслать данные. После приоритет снижается до Dispatch DPC
  7. Dispatch DPC — как только данные от устройств получены можно начинать их обрабатывать.
  8. APC — Asynchronous Procedure Call. Через этот механизм вы можете исполнить код когда поток будет спать вызвав WaitForSingleObject, Sleep и другие.
  9. Passive/Low — здесь исполняются все приложения в User Mode.

Если вы всегда программировали в режиме пользователя, то никогда не слышали про IRQL, потому что все пользовательские программы выполняеются с приоритетом Passive/Low (0). Как только происходит событие с большим уровнем приоритета (событие от клавиатуры, таймер планировщика потоков), процессор сохраняет состояние прерванного потока, которое представляет из себя значения регистров CPU, и вызывает диспетчер прерываний (interrupt dispatcher, просто функция), который повышает приоритет IRQL через API KeRaiseIrql в HAL и вызывает непосредственно сам код обработчика (interrupt’s service routine). После этого IRQL CPU понижается до прежнего уровня через функцию KeLowerIrql и прерванный поток начинает обработку с того же места где его прервали. На этом механизме основан планировщик потоков. Он устанавливает таймер, который с определённым интервалом (квант времени) генерирует прерывание с приоритетом DPC/Dispatch (2) и в своей interrupt’s service routine по определённому алгоритму назначает новый поток на исполнение.

Механизм IRQL реализовывается на уровне софта в Hardware Abstraction Layer (HAL.dll), а не железа. В Windows системах есть драйвер шины (bus driver), который определяет наличие устройств подключенных к шинам – PCI, USB и др. и номера прерываний которые могут быть назначены каждому устройству. Драйвер шины сообщает эту информацию Plug and play manager, который уже решает какие номера прерываний назначить каждому устройству. Далее арбитр прерываний внутри PnP Mgr (PnP interrupt arbiter) устанавливает связи между IRQ и IRQL.

Когда приходит прерывание от клавиатуры, любой исполняемый в данный момент поток (это может быть ваша программа) назначается на его обработку. Interrupt dispatcher повышает приоритет IRQL CPU до одного из уровней Device1-DeviceN. После этого менеджер виртуальной памяти не сможет найти страницу если она не загружена в RAM (не сможет обработать Page Fault), планировщик потоков не сможет прервать выполнение, потому что они все работают с меньшим уровнем IRQL. Главная задача драйвера клавиатуры в этот момент считать полученные данные и сохранить их для дальнейшей обработки. Данные записываются в объект типа _DPC (Deferred Procedure Call), который сохраняется в список DPC потока (что-то вроде std::list<DPC>, в ядре ОС вместо массивов используются связанные списки). Как только прерывания от всех внешних устройств обработаны, IRQL потока понижается до уровня DPC в котором и производится обработка отложенных процедур (DPC). В коде обработчика DPC для клавиатуры вызывается функция из драйвера клавиатуры Kbdclass.sys:

VOID KeyboardClassServiceCallback(
  _In_    PDEVICE_OBJECT       DeviceObject,
  _In_    PKEYBOARD_INPUT_DATA InputDataStart,
  _In_    PKEYBOARD_INPUT_DATA InputDataEnd,
  _Inout_ PULONG               InputDataConsumed
);

Так вот, драйвер клавиатуры (kbdclass.sys) получает данные от порта (USB, PS2) через прерывание и записывает их через WriteFile, компонент внутри ядра Windows просыпается, считывает их используя API ReadFile и добавляет в очередь сообщений с клавиатуры. API для работы с файлом могут использоваться для чтения данных с драйверов. С этого момента начинается обработка данных стеком ввода Windows, об этом в следующей статье.

Если у вас есть ПК с PS2 портом и вы умеете пользоваться WinDbg в режиме ядра, то можете легко найти обработчик прерываний клавиатуры напечатав команду !idt, которая выведет на экран всю таблицу векторов прерываний. Прерывание вклинивается в ход выполнения программы, слово вектор здесь подразумевает направление, направление исполнения программы. WinDbg был сделан специально для отладки Windows, самая последняя версия называется WinDbgX. Он имеет текстовый интерфейс, который отпугивает людей привыкших к Visual Studio, однако предоставляет гораздо больше возможностей, в частности исполнение скриптов. Прерывание фиолетового порта PS2 выделено красным. Функция которая его обрабатывает называется I8042KeyboardInterruptService, которая находится в файле i8042prt.sys.

BOOLEAN
I8042KeyboardInterruptService(
  IN  PKINTERRUPT Interrupt,
  IN  PVOID Context
  );

Routine Description:

    This is the interrupt service routine for the keyboard device when
    scan code set 1 is in use.

Arguments:

    Interrupt - A pointer to the interrupt object for this interrupt.

    Context - A pointer to the device object.

Return Value:

    Returns TRUE if the interrupt was expected (and therefore processed);
    otherwise, FALSE is returned.

Сейчас возникает вопрос, откуда у обработчика прерываний аргумент? Кто его передаёт? Ведь CPU ничего не знает о нём. Если поставите в неё breakpoint, то удивитесь ещё больше увидев несколько функций выше по стеку:

0: kd> kC
# Call Site
00 i8042prt!I8042KeyboardInterruptService
01 nt!KiCallInterruptServiceRoutine
02 nt!KiInterruptSubDispatch
03 nt!KiInterruptDispatch
04 nt!KiIdleLoop

Объяснение здесь простое – это не та функция которая сохранена в регистре IDT процессора. То что вы видите на картинке выше на самом деле объекты типа _KINTERRUPT. В таблице прерываний сохранён специальный ассемблерный код (nt!KiIdleLoop), который знает как найти объект описывающий прерывание в памяти. Что же интересного есть в нём?

  1. Указатель на объект представляющий драйвер в памяти.
  2. Указатель на функцию i8042prt!I8042KeyboardInterruptService, которая и вызывает код считывающий данные из порта PS2 через ассемблерную команду IN AL, 0x60 – сохранить значение из порта номер 0x60 в регистре AL.
  3. Функция dispatcher – ей передаётся указатель функцию из пункта №2 и она вызывает её.
  4. Состояние регистров CPU. Перед вызовом прерывания состояние CPU будет сохранено сюда, и отсюда же будет восстановлено.
  5. Приоритет прерывания. Не тот который определяет контроллер прерываний, а тот который Windows считает нужным. Это IRQL (Interrupt Request Level) – абстракция над IRQ.

Как только обработчик прерываний клавиатуры будет вызван, он уведомит драйвер клавиатуры о полученных данных, после чего будет уведомлено ядро ОС, которое обработав данные отправит их дальше по стеку ввода, где они могут быть доставлены приложению, которое на них отреагирует, или перед этим в обработчик языков (азиатские иероглифы, автокоррекция, автозаполнение).
Ядро ОС напрямую не взаимодействует с драйвером клавиатуры, для этих целей используется Plug’n’Play Manager. Этот компонент предоставляет API IoRegisterPlugPlayNotification, который вызовет предоставленную callback-функцию когда устройство будет добавлено или удалено.

Пару слов о USB

Ознакомление с работой порта USB потребовало бы отдельной статьи описывающей его работу и плюс описание обработки данных HID на Windows. Это очень сильно усложнило бы материал, к тому же уже есть хорошие статьи по теме, поэтому PS2 идеальный пример из-за своей простоты.

USB создавался как универсальный порт для всех устройств, будь то клавиатура, фотоаппарат, сканнер, игровой руль с педалями, принтер и пр. Вдобавок он поддерживает вложенность портов – USB материнки => монитор с USB => клавиатура с USB к которой подключена мышка, флешка и USB-hub к которому подключен жёсткий диск. Взглянув на контакты USB 2.0 вы увидите что они не заточены под передачу каких-то определённых данных, как у PS2. Их всего четыре – витая пара для передачи битов данных, плюс и минус питания.

Провода кабеля USB 2.0

USB 3.0 быстрее за счёт дополнительных пяти контактов. Как видите там нету линии CLOCK для синхронизации, поэтому логика передачи данных сложнее. Слева USB 2.0 и справа USB 3.0 для сравнения.

Все данные передаются через протокол HID (Human Interface Device), который описывает форматы, порядок взаимодействия и передачи данных и всё остальное. Стандарт USB 2.0 занимает 650 страниц, документ HID Class Specification, описывающий работу устройств (мыши, клавиатуры и пр) – 97 страниц, их рекомендуется изучить если вы работаете с USB.

Первым делом подключенное устройство должно рассказать о себе, для этого оно отправляет несколько структур данных, в которых указывается ID устройства и ID производителя по которым Plug’n’Play manager может найти в реестре информацию, загрузить и соединить драйвера. USB устройства пассивны, т.е. хост должен сам с определённым интервалом проверять наличие данных. Частота опроса и размер пакета данных задаются в одном из дескрипторов устройства USB. Максимальный размер пакета – 64 байта, что для информации о нажатых клавишах более чем достаточно.

В Windows есть встроенная поддержка HID, она не такая простая как связь драйвера порта PS2 с драйвером клавиатуры, потому что драйвер HID должен уметь обрабатывать все поддерживаемые протоколом сценарии. Вне зависимости от провайдера данных — порты PS2, USB или Remote Desktop или виртуальная машина – на самом верху driver node будет находится Kbdclass, от которого ядро ОС и будет получать информацию. Уведомление о подсоединении клавиатуры будет обрабатываться через Plug’n’Play Manager, так что для ядра Windows не имеет значение какой порт или источник данных от устройства используется.

ч.1 — Основы ОС и компьютера
ч.2 — Как работает материнская плата и клавиатура через порт PS2

Все способы:

  • Запускаем дополнительные параметры запуска Windows 10
    • Способ 1: Меню «Параметры»
    • Способ 2: Окно входа в систему
    • Способ 3: Меню «Пуск»
    • Способ 4: Созданный вручную ярлык
    • Способ 5: Утилита «Выполнить»
    • Способ 6: Установщик Windows 10
  • Вопросы и ответы: 0

Иногда пользователи сталкиваются с необходимостью запуска дополнительных параметров загрузки Windows 10. В этом списке присутствуют опции, позволяющие восстановить работу ОС, удалить последние обновления или драйверы либо запустить командную строку. Как видно, пользы от этого раздела много, однако далеко не все знают, как именно в него можно попасть. Сегодня мы хотим исправить эту ситуацию, рассказав обо всех доступных способах осуществления поставленной задачи.

Запускаем дополнительные параметры запуска Windows 10

Настоятельно рекомендуем ознакомиться со всеми методами, поскольку каждый из них может пригодиться в определенной ситуации, что зависит непосредственно от нее. Например, иногда не получается войти в систему или даже загрузить ее, поэтому и следует знать, какой именно вариант в каких случаях использовать.

Способ 1: Меню «Параметры»

В первую очередь предлагаем изучить относительно длительный метод запуска. Он заключается в использовании меню Параметры. От пользователя требуется выполнить такие действия:

  1. Откройте «Пуск» и перейдите в меню «Параметры», кликнув по соответствующему значку в виде шестеренки.
  2. Запуск меню параметров для перезагрузки Windows 10 в режиме восстановления

  3. Опуститесь в самый низ, где отыщите раздел «Обновление и безопасность».
  4. Переход в меню Обновление и безопасность для перезагрузки Windows 10 в режиме восстановления

  5. Здесь вас интересует левая панель и кнопка «Восстановление».
  6. Переход в раздел восстановление для перезагрузки Windows 10 с дополнительными параметрами запуска

  7. Остается только нажать на «Перезагрузить сейчас».
  8. Кнопка для перезагрузки Windows 10 с дополнительными параметрами запуска

  9. Компьютер тут же будет отправлен на перезагрузку.
  10. Спустя несколько секунд отобразится новое меню «Выбор действия». Здесь укажите «Поиск и устранение неисправностей».
  11. Переход в меню исправления неполадок при перезагрузке компьютера с Windows 10

  12. В меню «Диагностика» выберите «Дополнительные параметры».
  13. Открытие дополнительных параметров запуска в режиме восстановления Windows 10

  14. Теперь вы попадаете в параметры загрузки Windows 10. Здесь используйте расположенные плитки, чтобы начать выполнение нужных действий, например, удаление обновлений или откат до точки восстановления.
  15. Взаимодействие с дополнительными параметрами запуска Windows 10 в режиме восстановления

Возле каждой плитки присутствует краткое описание на русском языке, поэтому вы точно сможете понять, какой именно параметр запуска вам необходим.

Способ 2: Окно входа в систему

Как уже было сказано ранее, иногда по некоторым причинам даже не удается войти в систему, используя свой личный профиль. В такой ситуации меню Параметры не подойдет для запуска дополнительных вариантов загрузки, поэтому придется воспользоваться другим методом.

  1. В окне входа в учетную запись нажмите на кнопку выключения.
  2. Кнопка выключения в окне входа в профиль Windows 10

  3. Зажмите клавишу Shift и не отпускайте ее. Теперь левой кнопкой мыши кликните на «Перезагрузка».
  4. Кнопка перезагрузки Windows 10 в окне входа в профиль

  5. Все еще не отпускайте Shift и нажмите на «Все равно перезагрузить».
  6. Подтверждение перезагрузки Windows 10 через окно входа в профиль

  7. После появления меню «Выбор действия» можно отпустить зажатую клавишу.
  8. Успешная перезагрузка с дополнительными параметрами запуска Windows 10 через окно входа в профиль

Осталось только перейти к дополнительным параметрам устранения неполадок, чтобы запустить необходимую опцию и следовать отобразившимся инструкциям.

Способ 3: Меню «Пуск»

Еще один альтернативный вариант перехода к необходимому меню — кнопка выключения, которая находится в «Пуск». Для этого перейдите в соответствующее окно, нажав на Win или виртуальную кнопку на панели задач, а затем щелкните по кнопке выключения.

Кнопка выключения Windows 10 в меню Пуск

Зажмите Shift и щелкните на «Перезагрузить», чтобы компьютер сразу же ушел на перезагрузку. Дождитесь появления интересующего вас окна с выбором действия, чтобы начать взаимодействие с дополнительными параметрами.

Перезагрузка Windows 10 через меню Пуск

Способ 4: Созданный вручную ярлык

Иногда пользователю по каким-то причинам приходится часто запускать рассматриваемый сегодня режим. В таких ситуациях приведенные выше методы не совсем подойдут, поскольку для их реализации требуется выполнить ряд действий. Куда проще нажать на заранее созданный ярлык, чтобы сразу же перезагрузить ПК в нужном режиме. Однако для этого его придется сначала создать, что делается так:

  1. Щелкните ПКМ по пустому месту на рабочем столе, наведите курсор на «Создать» и выберите «Ярлык».
  2. Переход к созданию ярлыка для перезагрузки с дополнительными параметрами запуска Windows 10

  3. В качестве расположения объекта укажите %windir%\system32\shutdown.exe -r -o -f -t 0 и нажмите на «Далее».
  4. Ввод расположения ярлыка для переазагрузки с дополнительными параметрами Windows 10

  5. Задайте произвольное название ярлыку и сохраните его.
  6. Ввод названия ярлыка для перезагрузки Windows 10 с дополнительными параметрами запуска

  7. Теперь в любой момент вы можете просто нажать по нему, чтобы отправить ПК на перезагрузку и перейти к дополнительным параметрам запуска.
  8. Перезагрузка Windows 10 с дополнительными параметрами запуска через ярлык

  9. Только учитывайте, что перезагрузка будет начата сразу же после клика по файлу.
  10. Процесс перезагрузки Windows 10 через вручную созданный ярлык

  11. Вы уже знаете, что в меню «Выбор действия» вас интересует «Поиск и устранение неисправностей».
  12. Дополнительное меню загрузки Windows 10 после перезагрузки через вручную созданный ярлык

Способ 5: Утилита «Выполнить»

В семействе операционных систем Виндовс имеется стандартная утилита «Выполнить». Через нее можно запускать другие приложения или осуществлять переход по указанному пути. Однако для нее существуют две отдельные команды, которые заслуживают внимания.

  1. Для начала запустите саму утилиту. Сделать это можно через комбинацию Win + R или строку поиска в меню «Пуск».
  2. Запуск утилиты Выполнить для перезагрузки Windows 10 с дополнительными параметрами

  3. В строке введите shutdown.exe -r -fw, если хотите задать задержку перезагрузки ровно на минуту.
  4. Перезагрузка Windows 10 с дополнительными параметрами и задержкой через утилиту Выполнить

  5. Используйте create shutdown.exe -r -fw -t 0 для мгновенного завершения работы текущего сеанса.
  6. Моментальная перезагрузка Windows 10 с дополнительными параметрами через утилиту Выполнить

Все остальные действия в точности повторяют уже увиденное ранее, поэтому не будем останавливаться на них.

Способ 6: Установщик Windows 10

Последний метод, о котором мы хотим поговорить в рамках сегодняшней статьи, является самым сложным, поэтому и стоит на этом месте. Он подойдет в том случае, когда параметры запуска требуется открыть, если Windows вообще не загружается. Для этого нужно выполнить такие действия:

  1. Сначала, используя другой ПК, скачайте установочный образ Виндовс 10 и запишите его на флешку, создав тем самым загрузочный накопитель. Детальнее об этом читайте в отдельном материале на нашем сайте, кликнув по расположенной далее ссылке.
  2. Подробнее: Создание загрузочной флешки с Windows 10

  3. Вставьте флешку и включите компьютер. При появлении уведомления нажмите на любую клавишу для загрузки со съемного устройства.
  4. Подтверждение запуска Windows 10 с установочного носителя

  5. Откроется окно установки. Сначала выберите предпочитаемый язык интерфейса.
  6. Переход к установке Windows 10 для запуска дополнительных параметров загрузки

  7. Затем щелкните по надписи «Восстановление системы».
  8. Переход к восстановлению Windows 10 через установочное окно

  9. Нажмите по плитке «Поиск и устранение неисправностей».
  10. Переходите к взаимодействию с дополнительными параметрами.
  11. Дополнительные параметры запуска Windows 10 в режиме работы с установщиком

Только что вы узнали о шести разных методах запуска дополнительных параметров запуска Виндовс 10, но существует еще один вариант. Если у ОС не получается три раза загрузиться корректно, необходимое меню появляется автоматически, и после этого можно перейти к выбору действий.

Наша группа в TelegramПолезные советы и помощь

Основные этапы загрузки операционной системы Windows

Загрузчик операционной системы — системное программное обеспечение, обеспечивающее загрузку операционной системы непосредственно после включения компьютера.

Загрузчик операционной системы:

— обеспечивает необходимые средства для диалога с пользователем компьютера (например, загрузчик позволяет выбрать операционную систему для загрузки);

— приводит аппаратуру компьютера в состояние, необходимое для старта ядра операционной системы (например, на x86архитектурах перед запуском ядра загрузчик должен правильно настроить виртуальную память);

— загружает ядро операционной системы в ОЗУ. Загрузка ядра операционной системы не обязательно происходит с жесткого диска. Загрузчик может получать ядро по сети. Ядро может храниться в ПЗУ или загружаться через последовательные интерфейсы (это может пригодиться на ранней стадии отладки создаваемой компьютерной системы);

— формирует параметры, передаваемые ядру операционной системы (ядру Windows передаются параметры, указывающие способ подключения корневой файловой системы);

— передаёт управление ядру операционной системы.

Загрузка Windows

1. После подачи питания запускается процесс самотестирования, управляет которым программа BIOS. Если на данном этапе выявляется неисправный узел, то загрузка ПК останавливается и на экран выводится соответствующее уведомление, либо раздается серия звуковых сигналов.

Компьютер тестирует себя (стадия POST, Power On Self Test), оперативную память, физические устройства. Если BIOS поддерживает спецификацию PnP, то происходит определение и настройка такого типа устройств. BIOS обнаруживает загрузочное устройство (жесткий диск, привод CD ROM), загружает и запускает на выполнение основную загрузочную запись (MBR). MBR просматривает таблицу разделов (partition table), чтобы найти активный, загружает загрузочный вектор активного раздела в память и запускает его на выполнение. Загружает и инициализирует файл NTLDR, который представляет собой загрузчик ОС.

2. После окончания теста BIOS запускает определение загрузочного сектора на носителях, которые поддерживает материнская плата (дискета, жесткий диск, оптический диск). Приоритет поиска загрузочного сектора настраивается в настройках BIOS.

При загрузке 32-разрядных версий операционной системы Windows  (2000, XP или Server 2003) используются следующие файлы:

C:NTLDR — стадии подготовки к загрузке и загрузка

C:BOOT.INI — стадия загрузки ядра

C:BOOTSECT.DOS — стадия загрузки ядра (опционально)

C:NTDETECT.COM — стадия загрузки ядра

%systemroot%System32NTOSKRNL.EXE — стадия загрузки ядра (или NTKRNLPA.EXE)

%systemroot%System32HAL.DLL — стадия загрузки ядра

Здесь под %systemroot% подразумевается директория, где размещены основные файлы операционной системы, например, D:Windows — для Windows XP, установленной на логический диск D. Для системы Windows 2000, например, установленной на логическом диске С, это будет директория C:WINNT.

3 После того, как загрузочный накопитель определен, с него считывается первый сектор, в котором расположена основная загрузочная запись (MBR, Master Boot Record). MBR также содержит таблицу разделов диска с пометкой — какой из них активный.

В общем виде, структура главной загрузочной записи MBR, может быть представлена следующим образом:

— программный код и данные начального загрузчика. (446 байт.)

— таблица разделов диска (4 поля по 16 байт — 64 байта)

— сигнатура 55AA (2 байта)

Структура MBR включает в себя 2 основных элемента — программный код первичного загрузчика и таблицу разделов. Обязательным признаком наличия записи MBR является специальный код (сигнатура) в двух последних байтах — 55AA.

Наличие сигнатуры проверяется подпрограммой

4. MBR определяет активный раздел и управление передается загрузочной записи, которую хранит первый сектор активного раздела. При помощи данной загрузочной записи активируется менеджер загрузки ОС Windows (называется bootmgr – файл, расположенный в корневой директории активного раздела).

boot.ini позволяют загрузчику найти дальнейшие компоненты загружаемой системы и определяют нужные параметры начальной загрузки.

Диспетчер загрузки bootmgr представляет собой файл небольшого размера, расположенный в корневом каталоге активного раздела. Основное его предназначение — обеспечение дальнейшей процедуры загрузки в соответствии с существующей конфигурацией, хранящейся в специальном хранилище — хранилище данных конфигурации ( BCDBoot Configuratin Data), представляющем собой файл с именем BCD, находящийся в каталоге BOOT активного раздела.

Пример содержимого boot.ini:

[boot loader]
timeout=10
default=multi(0)disk(0)rdisk(0)partition(1)WINNT
[operating systems]
multi(0)disk(0)rdisk(0)partition(3)WINNT="MS Windows 2000
Server" /fastdetect
multi(0)disk(0)rdisk(0)partition(1)WINNT="MS Windows 2000
Professional RUS" /fastdetect

Параметр timeout задает время ожидания выбора загружаемой ОС в секундах, default — определяет, что загружать по умолчанию. В секции[operating systems] — список загружаемых ОС и параметры их загрузки. Пути задаются в ARC-виде (Advanced RISC Computer), где:

multi(0) — номер контроллера HDD. 0 — Primary, 1 — Secondary.

disk(0) — для IDE всегда равен 0, для SCSI — номер логического устройства (LUN)

rdisk(0) — для SCSI всегда равен 0, для IDE — номер физического диска.

partition(1) — номер раздела с установленной OC. Номера разделов начинаются с «1»

WINNT — имя каталога с установленной OC.

5. Далее менеджер загрузки проверяет информацию конфигурации системы, которая записана в файл BCD (аббревиатура от Boot Configuration Data) хранилище данных конфигураций загрузки. Если в файле содержится несколько записей, пользователь увидит меню выбора операционной системы. Расположен данный файл в каталоге с названием Boot активного раздела.

В качестве активного раздела используется, автоматически создаваемый при инсталляции в первой части диска, раздел небольшого размера ( около 100Мб). Данному разделу не присваивается буква, и в проводнике он не отображается. Это сделано с целью защиты загрузчика от небезопасных для него действий пользователя — удаления файлов конфигурации или самого диспетчера, сжатия файловой системы и т.п.

Раздел конфигурации BCD содержит подраздел Description с параметрами описания и подраздел Objects с объектами конфигурации загрузки. Данные конфигурации загрузки можно условно разделить на 3 основных составляющих:

— хранилище BCD (Store)

— записи в хранилище (Entries)

— параметры записей (Entry Options)

Иерархически, хранилище конфигурации загрузки представляет собой совокупность объектов (Objects), состоящих из отдельных элементов (Elements):

Каждый из объектов представляет собой упорядоченную структуру элементов, обрабатываемую диспетчером загрузки. Существует 3 типа объектов:

— приложения (application objects)

— наследуемые объекты

— устройства (device objects)

Если вернуться к отображаемой редактором реестра структуре хранилища конфигурации, то заметно, что каждый подраздел раздела Objects имеет имя, представляющее собой глобальный уникальный идентификатор — GUID . Идентификатор GUID формируется программным путем и однозначно является уникальным для той системы, где он создается. Алгоритм формирования GUID построен таким образом, что каждый новый генерируемый идентификатор никогда не совпадает с другим,

существующим в данной системе. Обозначается GUID в виде групп из шестнадцатеричных цифр, разделяемых дефисами, и заключенными в фигурные скобки:

{d1f837a2-7e0f-11df-bc8b-f6edb78d41b5}

6 Как только система выбрана, активируются модуль загрузки Windows Winload.exe, системные службы, компоненты ядра Hal.dll и Ntoskrnl.exe и ряд других компонентов – данный этап сопровождается анимированным логотипом.

7 Активируется процесс winlogon.exe, необходимый для управления входом пользователей в Windows. Если в системе всего один пользователь без пароля, вход будет произведен в автоматическом режиме. Если это не так – будет выведено окно выбора пользователя с формой для ввода пароля (если он установлен).

Исходя из вышеперечисленного, можно сделать вывод, что для корректного старта Windows должны выполняться следующие требования:

— текущие параметры BIOS должны обеспечить загрузку с накопителя, на котором установлена ОС. Если в настройках указано, что в первую очередь загрузка производится со сменных носителей, необходимо убедиться в их отсутствии;

— первый сектор загрузочного диска должен содержать корректную загрузочную запись и таблицу разделов, при этом один из разделов обязан быть помеченным как активный;

-активный раздел должен иметь загрузочную запись Windows , а его корневой каталог должен содержать файл bootmgr;

— в каталоге Boot активного раздела обязан присутствовать файл BCD, которых хранит записи об инсталлированных операционных системах.

Загрузка ядра

На этапе загрузки ядра NTLDR выполняет следующие действия:

Загружает код ядра из файла NTOSKRNL.EXE (NTKRNLPA.EXE при наличии опции /РАЕ в файле boot.ini), но не инициализирует его.

Загружает код слоя аппаратных абстракций из файла HAL.DLL.

Загружает раздел HKLMSYSTEM из %systemroot%System32ConfigSystem.

Выбирает набор параметров для конфигурации (список драйверов, устройств, устройств и служб, которые необходимо запустить).

Загружает драйверы (обычно это низкоуровневые драйвера, как, например, драйвера дисков) со значением параметра Start равным 0x0. Значение параметра List в

HKLMSYSTEMCurrentContorlSetControlServiceGroupOrder

 определяет порядок загрузки их загрузчиком NTLDR. Драйверы, регулирующие свою загрузку таким способом, должны иметь соответствующие значения параметра Group в своих подразделах раздела Системного Реестра 

HKLMSystemCurrentControlSetServices.

Инициализация ядра

По завершении загрузки, ядро инициализируется и ему передается управление от загрузчика NTLDR. Создается раздел HKLMHardware по результатам распознавания аппаратуры, куда заносится информация о системной плате, устройствах и прерываниях. Создается набор параметров Clone путем копирования управляющих параметров; информация о которых содержится в параметре Current в разделе HKLMSystemSelect. Набор Clone никогда не модифицируется. Загружаются драйверы, указанные в разделе системного реестра

HKLMSystemCurrentControlSetServices

в параметрах которых присутствует значение Start равное 0x01 , порядок загрузки которых так же, как и было указано выше, определяется в параметре Group. Драйверы инициализируются сразу же после их загрузки. Значения параметра ErrorControl в описании драйвера (то есть в его параметре, указанном в Системном Реестре) определяет реакцию системы в том случае, если при загрузке и инициализации данного драйвера произошла ошибка. Запускаются сервисы (например, Служба Журнала Событий) и драйверы.

Вывод на экран информации о процессе загрузки

Указав параметр /sos в соответствующей строке файла boot.ini, например

multi(0)disk(0)rdisk(0)partition(2)Windows ="Комментарий для пользователя"/sos

можно обеспечить вывод на экран информацию о загружаемых программных модулях операционной системы/

multi(0)disk(0)rdisk(0)partition(1)WindowsSystem32ntoskrnl.exe
multi(0)disk(0)rdisk(0)partition(1)WindowsSystem32hal.dll
multi(0)disk(0)rdisk(0)partition(1)WindowsSystem32KDCOM.DLL
multi(0)disk(0)rdisk(0)partition(1)WindowsSystem32BOOTVID.DLL
multi(0)disk(0)rdisk(0)partition(1)WindowsSystem32configsystem
multi(0)disk(0)rdisk(0)partition(1)WindowsSystem32c_1251.nls
multi(0)disk(0)rdisk(0)partition(1)WindowsSystem32c_866.nls
multi(0)disk(0)rdisk(0)partition(1)WindowsSystem32l_intl.nls
multi(0)disk(0)rdisk(0)partition(1)WindowsFONTSvga866.fon

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Max file name in windows
  • Msi system control manager windows 10
  • Диагностика синего экрана windows 10
  • Программа для отключения ненужных программ windows 10
  • Вечная подготовка автоматического восстановления windows 10