[Previous] [Next]

Приложение Б

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

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

C:\NTLDR — стадии подготовки к загрузке и загрузка
C:\BOOT.INI — стадия загрузки ядра
C:\BOOTSECT.DOS — стадия загрузки ядра (опционально)
C:\NTDETECT.COM — стадия загрузки ядра
%systemroot%\System32\NTOSKRNL.EXE — стадия загрузки ядра (или NTKRNLPA.EXE)
%systemroot%\System32\HAL.DLL — стадия загрузки ядра
Раздел реестра HKLM\SYSTEM — стадия инициализации ядра
%systemroot%\System32\*.sys — стадия инициализации ядра

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

Подготовка к загрузке

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

Начальная стадия загрузки

Загрузчик NTLDR переключает процессор из реального режима в 32-разрядный защищенный, что необходимо для получения возможности выполнить любую дополнительную функцию. Файловая мини-система, встроенная в NTLDR позволяет загружать Windows NT 5 с носителей FAT, FAT32 и NTFS.

Стадия загрузки

Загрузчик NTLDR считывает файл BOOT.INI, использует его для отображения экрана загрузчика, предоставляет пользователю возможность выбора ОС, выбирает профиль оборудования и загружает ядро, но не инициализирует его. Файл BOOT.INI содержит 2 раздела: [Boot Loader] и [Operating System]

Распознавание оборудования

NTDETECT.COM запускается после надписи "Выберите операционную систему для загрузки", составляет список установленного на данный момент оборудования, и возвращает этот список в NTLDR для последующего включения его в раздел системного реестра HKLM\HARDWARE. NTDETECT.COM выполняет определение характеристик устройств:

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

Выбор конфигурации

После того как NTLDR начинает загрузку и получит информацию об оборудовании, будет отображен экран с диалогом "Выбор профиля оборудования/Восстановление системы" (Hardware profile/Configuration recovery). B случае если профиль оборудования является единственным, то диалога представлено не будет.

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

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

Значение параметра List в HKLM\SYSTEM\CurrentContorlSet\Control\ServiceGroupOrder определяет порядок загрузки их загрузчиком NTLDR. Драйверы, регулирующие свою загрузку таким способом, должны иметь соответствующие значения параметра Group в своих подразделах раздела Системного Реестра HKLM\System\CurrentControlSet\Services.

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

По завершении загрузки, ядро инициализируется и ему передается управление от загрузчика NTLDR.

  1. Создается раздел HKLM\Hardware по результатам распознавания аппаратуры, куда заносится информация о системной плате, устройствах и прерываниях.
  2. Создается набор параметров Clone путем копирования управляющих параметров; информация о которых содержится в параметре Current в разделе HKLM\System\Select. Набор Clone никогда не модифицируется.
  3. Загружаются драйверы, указанные в разделе системного реестра HKLM\System\CurrentControlSet\Services, в параметрах которых присутствует значение Start равное 0x01 , порядок загрузки которых так же, как и было указано выше, определяется в параметре Group. Драйверы инициализируются сразу же после их загрузки. Значения параметра ErrorControl в описании драйвера (то есть в его параметре, указанном в Системном Реестре) определяет реакцию системы в том случае, если при загрузке и инициализации данного драйвера произошла ошибка. Подробнее возможные значения параметра ErrorControl и соответствующие способы реакции операционной системы представлены в Приложении В.
  4. Запускаются сервисы (например, Служба Журнала Событий) и драйверы.

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

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

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

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

multi(0)disk(0)rdisk(0)partition(1)\Windows\System32\ntoskrnl.exe
multi(0)disk(0)rdisk(0)partition(1)\Windows\System32\hal.dll
multi(0)disk(0)rdisk(0)partition(1)\Windows\System32\KDCOM.DLL
multi(0)disk(0)rdisk(0)partition(1)\Windows\System32\BOOTVID.DLL
multi(0)disk(0)rdisk(0)partition(1)\Windows\System32\config\system
multi(0)disk(0)rdisk(0)partition(1)\Windows\System32\c_1251.nls
multi(0)disk(0)rdisk(0)partition(1)\Windows\System32\c_866.nls
multi(0)disk(0)rdisk(0)partition(1)\Windows\System32\l_intl.nls
multi(0)disk(0)rdisk(0)partition(1)\Windows\FONTS\vga866.fon
multi(0)disk(0)rdisk(0)partition(1)\Windows\AppPatch\drvmain.sdb
multi(0)disk(0)rdisk(0)partition(1)\Windows\System32\DRIVERS\ACPI.SYS
multi(0)disk(0)rdisk(0)partition(1)\Windows\System32\DRIVERS\WMILIB.SYS
multi(0)disk(0)rdisk(0)partition(1)\Windows\System32\DRIVERS\pci.sys
multi(0)disk(0)rdisk(0)partition(1)\Windows\System32\DRIVERS\isapnp.sys
multi(0)disk(0)rdisk(0)partition(1)\Windows\System32\DRIVERS\viaide.sys
multi(0)disk(0)rdisk(0)partition(1)\Windows\System32\DRIVERS\PCIIDEX.SYS
multi(0)disk(0)rdisk(0)partition(1)\Windows\System32\DRIVERS\MountMgr.sys
multi(0)disk(0)rdisk(0)partition(1)\Windows\System32\DRIVERS\ftdisk.sys
multi(0)disk(0)rdisk(0)partition(1)\Windows\System32\DRIVERS\dmload.sys
multi(0)disk(0)rdisk(0)partition(1)\Windows\System32\DRIVERS\dmio.sys
multi(0)disk(0)rdisk(0)partition(1)\Windows\System32\DRIVERS\PartMgr.sys
multi(0)disk(0)rdisk(0)partition(1)\Windows\System32\DRIVERS\VolSnap.sys
multi(0)disk(0)rdisk(0)partition(1)\Windows\System32\DRIVERS\atapi.sys
multi(0)disk(0)rdisk(0)partition(1)\Windows\System32\DRIVERS\disk.sys
multi(0)disk(0)rdisk(0)partition(1)\Windows\System32\DRIVERS\CLASSPNP.SYS
multi(0)disk(0)rdisk(0)partition(1)\Windows\System32\DRIVERS\sr.sys
multi(0)disk(0)rdisk(0)partition(1)\Windows\System32\DRIVERS\Fastfat.sys
multi(0)disk(0)rdisk(0)partition(1)\Windows\System32\DRIVERS\KSecDD.sys
multi(0)disk(0)rdisk(0)partition(1)\Windows\System32\DRIVERS\NDIS.sys
multi(0)disk(0)rdisk(0)partition(1)\Windows\System32\DRIVERS\viaagp.sys
multi(0)disk(0)rdisk(0)partition(1)\Windows\System32\DRIVERS\nmfilter.sys
multi(0)disk(0)rdisk(0)partition(1)\Windows\System32\DRIVERS\Simvid.sys
multi(0)disk(0)rdisk(0)partition(1)\Windows\System32\DRIVERS\Mup.sys 

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

В том случае, если в строке описания параметров загрузки после опции /sos ввести /PAE (поддержка расширенной физической адресации, PAE, см. главу 4), то первая строка примет вид: multi(0)disk(0)rdisk(0)partition(1)\Windows\System32\ntkrnlpa.exe

Убедиться программным способом в том, поддерживает ли операционная система в настоящий момент работу с РАЕ (то есть с каким ключом она загружена), несложно. Достаточно в текст драйвера включить следующий фрагмент:
if(*Mm64bitPhysicalAddress==TRUE)
{
       #if DBG
              DbgPrint("System supports IO operations over 4GB");
       #endif
}
else
{
       #if DBG
              DbgPrint("System doesn't support IO ioerations over 4GB");
       #endif
}

Переменная Mm64BitPhysicalAddress объявляется в файлах wdm.h и ntddk.h.

Другое подтверждение работы операционной системы с поддержкой РАЕ (Physical Address Extension) можно обнаружить в Системном Реестре: в таком случае параметр PhysicalAddressExtension в разделе HKLM\System\CurrentControlSet\Control\Session Manager\Memory Management примет значение 1 (в отличие от значения 0 в отсутствие поддержки РАЕ).