Введение
Образ ядра Windows NT — это компьютерный файл, содержащий часть ядра Windows NT.
a computer file that contains a part of the Windows NT kernel
ntoskrnl. exe (short for Windows NT operating system kernel executable), also known as the kernel image, contains the kernel and executive layers of the Microsoft Windows NT kernel, and is responsible for hardware abstraction, process handling, and memory management. In addition to the kernel and executive layers, it contains the cache manager, security reference monitor, memory manager, scheduler (Dispatcher), and blue screen of death (the prose and portions of the code).
ntoskrnl.exe (сокращение от Windows NT operating system kernel executable), также известный как образ ядра, содержит ядро и исполнительные уровни ядра Microsoft Windows NT и отвечает за аппаратную абстракцию, обработку процессов и управление памятью. Помимо ядра и исполнительных уровней, он включает в себя менеджер кэша, систему контроля безопасности, менеджер памяти, планировщик (диспетчер) и экран синего цвета смерти (текст и фрагменты кода).
a computer file that contains a part of the Windows NT kernel
ntoskrnl. exe (short for Windows NT operating system kernel executable), also known as the kernel image, contains the kernel and executive layers of the Microsoft Windows NT kernel, and is responsible for hardware abstraction, process handling, and memory management. In addition to the kernel and executive layers, it contains the cache manager, security reference monitor, memory manager, scheduler (Dispatcher), and blue screen of death (the prose and portions of the code).
Обзор
x86-версии ntoskrnl.exe зависят от bootvid.dll, hal.dll и kdcom.dll (x64-варианты ntoskrnl.exe имеют эти DLL встроенными в ядро для повышения производительности). Однако это не собственное приложение. Иными словами, оно не связано с ntdll.dll. Вместо этого ntoskrnl.exe содержит стандартную точку входа "start", которая вызывает функцию инициализации ядра, не зависящую от архитектуры. Поскольку для его работы требуется статическая копия объектов времени выполнения C, исполняемый файл обычно имеет размер около 10 МБ. В Windows XP и более ранних версиях в источнике установки Windows поставляются четыре файла образа ядра для поддержки однопроцессорных систем, систем с симметричной многопроцессорностью (SMP), процессоров с PAE и процессоров без PAE. Установка Windows определяет, является ли система однопроцессорной или многопроцессорной, а затем устанавливает как PAE, так и не-PAE варианты образа ядра для определенного типа. На многопроцессорной системе Setup устанавливает ntkrnlmp.exe и ntkrpamp.exe, но переименовывает их в ntoskrnl.exe и ntkrnlpa.exe соответственно. Начиная с Windows Vista, Microsoft начала унифицировать образы ядра, поскольку многоядерные процессоры стали появляться на рынке, а PAE стало обязательным. + Имена файлов образов ядра 32-разрядной Windows Имя файла Поддерживает SMP Поддерживает PAE 32-разрядное ядро ntoskrnl.exe ✔ ntkrnlmp.exe ✔ ntkrnlpa.exe ✔ ntkrpamp.exe ✔ ✔ 64-разрядное ядро (x64-издания) Имя файла Поддерживает SMP Поддерживает 57-разрядный VA ntkrnlmp.exe ✔ ntkrla57.exe ✔ ✔
Подпрограммы в ntoskrnl используют префиксы в своих именах, чтобы указать, в каком компоненте ntoskrnl они определены. Поскольку не все функции экспортируются ядром, префиксы функций, заканчивающиеся на i или p (например, Mi, Obp, Iop), являются внутренними и не должны быть доступны пользователю. Эти функции содержат основной код и выполняют важные проверки, такие как проверка на уязвимости, отсутствующие аргументы и обработка исключений. В следующей таблице перечислены некоторые из них. + Префиксы функций NT Префикс Значение Cc Кэш файловой системы Cm Менеджер конфигурации, ядро режима Windows Registry Csr Функции, используемые для связи с процессом подсистемы Win32, csrss.exe (csrss означает подсистему времени выполнения клиент/сервер) Dbg Функции помощи при отладке, такие как программная точка останова Ex Windows executive, "внешний слой" Ntoskrnl.exe Exp Windows executive private (подпрограммы, предназначенные для внутреннего использования Windows Executive) FsRtl Библиотека времени выполнения файловой системы Io Менеджер ввода-вывода Iop Внутренний и базовый код для менеджера ввода-вывода Ke Основные подпрограммы ядра Ki Внутренние основные подпрограммы Kx Обработка прерываний, семафоры, спинлоки, многопоточность и функции переключения контекста Ky Внутренние и заглушки, которые генерируют кадр ловушки и вызывают функции с префиксом Kx Ks Потоковая передача ядра Kx Внутренние функции для получения реализаций спинлоков и семафоров Ldr Загрузчик исполняемых файлов PE NT Ldrp Внутренний базовый код для загрузчика PE, обычно просто реализация перебазирования PE Lpc Вызов локальной процедуры, внутренний, недокументированный механизм передачи сообщений между процессами или между пользователем и ядром Lsa Локальный центр безопасности Mm Управление памятью Mi Подпрограммы управления памятью, не экспортируемые для вызова из-за пределов менеджера памяти (i = internal) Nls Nls для поддержки языков (аналогично кодовым страницам) Ob Менеджер объектов Obp Внутренний базовый код для менеджера объектов Pfx Обработка префиксов Po Plug and play и управление питанием Ps Управление процессами и потоками (управление задачами) Psp Внутренний базовый код для менеджера задач Rtl Библиотека времени выполнения, т.е. многие служебные функции, которые могут использоваться собственными приложениями, но не связаны напрямую с поддержкой ядра Rtlp Библиотека времени выполнения private (только для внутреннего использования) Se Менеджер безопасности, токен доступа для Win32 API Sep Внутренний базовый код для менеджера безопасности Vf Проверка драйверов Vi Подпрограммы проверки драйверов, не экспортируемые для вызова из-за пределов проверки драйверов Zw или Nt Zw — это системные вызовы, объявленные в ntdll.dll и ntoskrnl.exe. При вызове из ntdll.dll в пользовательском режиме эти группы почти идентичны; они перехватываются в режиме ядра и вызывают эквивалентную функцию в ntoskrnl.exe через SSDT. При вызове функций непосредственно в ntoskrnl.exe (возможно только в режиме ядра) варианты Zw обеспечивают режим ядра, в то время как варианты Nt — нет.
Инициализация
Когда ядро получает управление, оно получает указатель типа struct от загрузчика. Указатель указывает на структуру, содержащую информацию об аппаратном обеспечении, путь к файлу реестра Windows, параметры ядра, определяющие предпочтения или опции загрузки, изменяющие поведение ядра, а также пути к файлам, загруженным загрузчиком (SYSTEM Registry hive, nls для преобразования кодировки символов и шрифт VGA). Определение этой структуры можно получить с помощью отладчика ядра или загрузить из базы символов Microsoft. В архитектуре x86 ядро получает систему уже в защищенном режиме, с подготовленными GDT, IDT и TSS. Однако, поскольку ядру неизвестны адреса этих структур, оно должно загружать их последовательно для заполнения структуры PCR (Process Control Region). Основная точка входа ntoskrnl.exe выполняет системно-зависимую инициализацию, затем вызывает системно-независимую инициализацию и, наконец, переходит в цикл простоя.
Водители
Список драйверов, которые необходимо загрузить с диска, извлекается из ключа Services в ключе текущего набора управления в системном разделе реестра (SYSTEM hive). Этот ключ содержит драйверы устройств, процессы ядра и пользовательские процессы. Все они совместно называются "службами" и хранятся в одном месте вперемешку. Во время инициализации или при запросе на загрузку драйвера, ядро просматривает это дерево, чтобы найти службы, помеченные как службы ядра.