Что делать, если при загрузке Вы видите сообщение: Не удается запустить Windows из-за испорченного или отсутствующего файла: windows root\system32\ntoskrnl.exe ?
Сегодня мы попытаемся ответить на этот вопрос. Прежде всего, что такое есть файл ntoskrnl.exe? Его название можно разложить на несколько составляющих: NT OS kernel - «ядро операционной системы NT»). В данном случае - файл ядра операционных систем семейства Windows NT. Данный файл запускается загрузчиком ядра (NTLDR) в безопасном режиме. Также он интересен тем, что содержит в себе картинку, которую мы видим при загрузке Windows (boot screen).
Примечание: Компания Microsoft расшифровывает аббревиатуру NT как «New Technology» (новая технология). По ней выпускаются все ОС, начиная с Windows 2000.
Файл ntoskrnl.exe располагается сразу в нескольких местах ОС (стандартная практика Microsoft). В более поздних версиях операционных систем такой подход позволяет достаточно эффективно производить автоматическое восстановление загрузки системы при ее повреждении. Но - все по порядку!
Давайте проведем поиск по каталогу Windows:
Видим, что файл ядра операционной системы находится в двух разных директориях.
В семействе ОС Windows различают четыре версии файлов ядра:
- ntoskrnl.exe - однопроцессорное ядро
- ntkrnlmp.exe (NT Kernel Multi-Processor version) - ядро ОС NT с поддержкой нескольких процессоров
- ntkrnlpa.exe - однопроцессорное ядро с более чем тремя гигабайтами оперативной памяти (режим PAE - Physical Address Extension)
- ntkrpamp.exe - многопроцессорное ядро с более чем тремя гигабайтами оперативной памяти
В обычной Windows XP для однопроцессорных систем можно зайти по адресу: c:\\windows\system32 и убедиться в этом самому.
На одном из этапов загрузки ОС, ее загрузчик (в данном случае - NTLDR) вызывает и передает управление системному процессу ядра Ntoskrnl. Процесс Ntoskrnl.exe инициализирует подсистему загрузки и запуск системных драйверов для устройств, а также подготавливает операционную систему для работы с прикладными программами и приложениями.
Частью кода, который также выполняется в режиме ядра, является уровень аппаратных абстракций (HAL - Hardware Abstraction Layer),
Код ядра ОС работает в наиболее привилегированном режиме работы процессора. Этот режим работы часто называют «нулевым кольцом защиты» (Ring 0). В x86-х процессорах подобный уровень привилегий предоставляет неограниченный доступ ко всем возможностям процессора, позволяет напрямую обращаться к периферии и аппаратным ресурсам всего компьютера.
Различные вирусы (сетевые черви и руткиты) стремятся получить доступ к ядру, чтобы "дотянуться" до системных функций, работающих с памятью, файлами, сетевыми соединениями и процессами на самом низком уровне. При их перехвате, можно надежно замаскировать свое присутствие в системе или - выполнить любое другое действие.
Сам факт вмешательства в ядро легко обнаруживается сравнением образа ntoskrnl.exe, постоянно находящимся в оперативной памяти, с файлом, расположенным на жестком диске компьютера по адресу c:\\windows\system32\ntoskrnl.exe
Есть простой способ убедиться в этом: удалите файл ntoskrnl.exe (его копию - можете тоже) и увидите, как через секунд 10-20 он автоматически появится на том же самом месте! Он скопируется на винчестер прямо из оперативной памяти.
У Вас может возникнуть вопрос: зачем файл ntoskrnl.exe вообще держать на диске, если его копия постоянно находится в ОЗУ компьютера? А затем, что эта копия как-то должна сначала записаться в память при старте системы. Оперативная память - энергозависимая (после каждого выключения ее содержимое обнуляется), вот и получается, что файл на диске нужен именно для того, чтобы считать с него информацию в память. А его образ в памяти гарантирует то, что файл на диске не будет удален, или модифицирован злоумышленником во время работы системы. Вот такая вот получается "круговая порука" :)
Давайте убедимся в том, что файл ntoskrnl.exe действительно постоянно присутствует в памяти в виде отдельного процесса. Это хорошо видно на примере Windows 7.
Запустим диспетчер задач и слева внизу отметим галочкой пункт "Отображать процессы всех пользователей". После этого в колонке "Имя образа" (процесса) мы увидим запись "System" и в поле его описания - "NT Kernel & System":
Пойдем дальше! Нажмем на меню "Вид" и в раскрывшемся списке отметим пункт "Выбрать столбцы". Появится окно, в котором мы можем указать дополнительные поля с данными, которые могут отображаться в диспетчере задач Windows.
Отмечаем галочкой пункт "Путь к образу" (процессу). Возвращаемся в диспетчер и видим, что в нем появился дополнительный столбец "Пут к образу", из которого четко видно, что процессом "System" является файл ntoskrnl.exe, находящийся по адресу c:\\windows\system32
Причем, если мы попробуем принудительно завершить этот процесс, то у нас это не получится.
Несмотря на все перечисленное выше, на практике (достаточно нередко) встречаются случаи когда мы видим при загрузке надпись: Не удается запустить Windows из-за испорченного или отсутствующего файла : windows root\system32\ntoskrnl.exe
Основываясь на своем личном опыте, могу сказать следующее: данная ошибка часто возникает при проблемах с жестким диском компьютера. Либо после того, как диск переподлючали или - добавляли в систему новый. Короче говоря, - проводились какие-либо манипуляции с физическими носителями.
Перечислим наиболее распространенные причины неисправности:
- ошибки файловой системы винчестера (проверять командой chkdsk)
- некорректное завершение работы (внезапное отключение электроэнергии)
- возникновение сбойных секторов на диске
После того, как мы убедимся что с дисковой подсистемой все в порядке, можно приступать к восстановлению файла ntoskrnl.
Для этого нам понадобится обычный установочный диск с Windows XP (2000) и немного удачи! :) Итак, выставляем в bios с него загрузку и перезагружаемся. Если все сделали правильно, увидим, что запустился мастер установки Windows:
Нам нужно дождаться когда появится следующее окно с предложением выбора опции восстановления системы:
Нажимаем клавишу «R» и попадаем в консоль восстановления (о том, что это такое мы говорили в предыдущих статьях). Здесь нас спросят: в какую копию операционной системы мы хотим выполнить вход? Если ОС у нас на компьютере одна, то нажимаем клавишу «1» и - ввод (Enter).
После этого, появится текстовое приглашение ввести пароль администратора установленной системы. Вводим пароль и снова нажимаем Enter (если пароля не было - сразу ввод). После этого, появится приглашение для ввода консольных команд: C:\\WINDOWS> , которое свидетельствует о том, что мы успешно вошли в консоль и можем приступить к восстановлению файла ntoskrnl.exe.
После этого нам нужно написать всего одну команду:
expand d:\i386\ntoskrnl.ex_ c:\windows\system32
Буквой «d» у нас здесь обозначен привод оптических дисков. Если у Вас по другому, - просто подставьте в строчку свою букву диска. Что есть команда «expand» и какую роль выполняет, мы с Вами разбирали в этой статье. Если коротко, то суть ее сводится к следующему: распаковать файл ntoskrnl.exe с оптического диска и записать в системную папку Windows.
После набора команды, нажимаем клавишу «Enter» и если все сделали правильно, нас спросят хотим ли мы перезаписать уже существующий на винчестере файл ntoskrnl.exe новым (с оптического диска)? Соглашаемся на замену (вводим с клавиатуры «y») и нажимаем ввод (Enter). Видим сообщение о том, что 1 файл успешно скопирован (распакован).
Теперь можно выходить из консоли: вводим команду «exit» (выход) и компьютер уйдет на перезагрузку. Не забываем в bios-е обратно выставить загрузку с жесткого диска и после еще одного ребута видим, что загрузка Windows успешно восстановлена!
В Windows 7 восстановить файл ntoskrnl.exe проще. Точнее, там лично нам вообще ничего делать не придется! :) В новых версиях Windows присутствует система автоматического восстановления загрузки и работоспособности ОС.
Давайте, для начала, посмотрим на файлы наших ядер в системной директории:
Как видите, у нас их здесь - два. Поскольку у меня на компьютере больше трех гигабайт оперативной памяти, то, в моем случае, Windows использует файл ядра ntkrnlpa.exe.
Давайте сымитируем проблему с этим файлом. Каким образом? А просто возьмем удалим его, перезагрузимся и посмотрим что будет? :) После перезагрузки Windows автоматически запустит среду восстановления WRE (Windows Recovery Environment) и попытается сама устранить проблему:
Знаете, замечательно, конечно, что WRE пытается делать за нас "грязную работу", но проблема состоит в том, что она абсолютно не показывает, что именно делается для восстановления работоспособности системы? Мол, вот исправили - радуйтесь!
Лично меня, как сам себе админа, и просто человека, который хочет понять, как это работает, такой подход мало устраивает. Конечно, пройдя все те этапы, которые описаны в начале данной статьи, мы понимаем, что система просто копирует файл ntoskrnl.exe откуда-то из своих "закромов" на его прежнее место, но согласитесь, что с подобными нововведениями бразды правления несколько выскальзывают из наших трудовых администраторских рук :)
Посокрушались и будет! После, без сомнения, героического восстановления файла ядра, Windows просит нас перезагрузить компьютер для применения исправлений.
Если успеть нажать ссылку "Отобразить диагностику и описание исправления" до того, как закончится отсчет времени, то нам, так уж и быть, покажут что приблизительно делала Windows Recovery Environment. Прокрутим ползунок справа в самый низ и там найдем вот такую надпись:
Что за файл? Какую функцию выполняет? - ни слова! Уже чувствуете незримое присутствие "Большого Брата"? :) Как бы там ни было, после перезагрузки мы увидим, что все в порядке и Windows восстановлена, а это - главное!
Надеюсь, что статья была для Вас полезной? Если так, то оставьте свой комментарий или воспользуйтесь кнопками внизу.