Zavádění operačního systému Windows XP do PC (1)
Zdroj: SOOM.cz [ISSN 1804-7270]
Autor: .cCuMiNn.
Datum: 26.5.2005
Hodnocení/Hlasovalo: 1.33/63
Zajímá vás co se odehrává v počítači při stisku tlačítka POWER? Nevíte jak zajistit aby se po startu systému automaticky spustily vaše programy? V této sérii článků se pokusím na některé tyto otázky odpovědět.
V sérii článků bych se chtěl zaměřit na zavedení operačního systému Windows XP do počítače. V tomto prvním díle se společně opdíváme na bootovací procesy, které probíhají mezi stiskem tlačítka Power On až do zobrazení přihlašovacího dialogu. Ve druhém díle bych chtěl zajít o něco dál a ukázat místa, která můžeme při spouštění Windows XP využít pro spuštění našeho kódu (zavedení trojských koní, apd.).
Tak tedy, jakmile stiskneme tlačítko Power On, abychom zapnuli svůj počítač vyžádá si zdroj energie autotest, ve kerém zkontroluje zda jsou v pořádku všechna napětí a hodnoty. Pokud zdroj uzná, že je napětí stabilní vyšle procesoru signál „Power Good“. Tato operace trvá běžně několik desetin vteřiny.
S příchodem signálu „Power Good“ ukončí časovač zasílání signálu RESET, čímž povolí procesoru začít s činností. Procesor v tuto chvíli začne zpracovávat kód ROM BIOSu, který je šestnáct bytů dlouhý a nachází se v nejvrchnější části paměti ROM na adrese FFFF:0000. Obsahuje pouze JMP instrukci na aktuální adresu programu ROM BIOS.
ROM BIOS nařídí základní test hardwaru pro ověření základních funkcí. Chyby, které by se v tomto bodě bootovacího procesu vyskytly, by byly oznámeny pípáním, protože dosud není inicializovaný systém videovýstupu.
Vyhledávač zařízení může vyžadovat zavedení vlastních ROM BIOS rutin přímo z připojeného zařízení. Takto zavádí své ovladače většina Grafických karet. Startovací rutiny BIOSu kontrolují paměťový prostor C000:0000 až C780:0000 video ROM. Chyby v této paměti jsou zobrazeny v podobě takovéto zprávy, kde XXXX označuje špatný adresový segment:
XXXX ROM Error
ROM BIOS zjistí zda jde o teplý nebo studený start. Pro toto zjištění se provedou rutiny BIOSU, které zjišťují hodnotu dvou bytů na adrese 0000:0472. Pokud je tato hodnota jiná než 1234h, znamená to, že jde o studený start.
V případě, že jde o studený start provede ROM BIOS úplný test POST (Power On Self Test). V opačném případě, když jde o teplý start je v POST testu vypnut test paměti. POST provede tyto tři testy:
- Zinicializuje videokartu a zobrazí konfigurační informace nebo chybu.
- Identifikuje BIOS a zobrazí jeho verzi, výrobce a datum.
- Otestují se všechny paměťové chipy, přičemž se zobrazuje průběh načítání instalované paměti.
Chyby, které se během POST testu vyskytnou mohou být klasifikovány jako kritické nebo nepodstatné. Nepodstatné chyby většinou zobrazí chybovou zprávu a povolí systému pokračovat v bootovacím procesu. Kritické chyby naopak ukončí bootovací proces počítače a jsou nejčastěji signalizovány pípáním beep kódů.
BIOS dále vyhledá a přečte konfigurační informace uložené v CMOS. CMOS je malá oblast paměti (64bytů), která je napájena z malé baterky umístěné na základní desce. Nejdůležitější informací v CMOS, je z hlediska bootovacího procesu pořadí zařízení, která budou zkoušena pro zavedení operačního systému (FDD, CD-ROM, HDD, apd.).
Pokud je prvním bootovatelným zařízením pevný disk, zkouší BIOS zjistit, zda úplně první sektor na tomto disku obsahuje Master Boot Rekord (MBR). Stejně postupuje i v případě bootování z diskety. Master Boot Rekord je úplně první sektor na disku, na cylindru 0, hlavě 0, sektor 1 a zabírá 512 bytů. Pokud je tento sektor nalezen, je nahrán do paměti na adresu 0000:7C00 a otestuje se kontrolní hodnota, která by správně měla obsahovat 55AAh v posledních dvou bytech. V případě chybného MBR nebo kontrolní hodnoty se bootovací proces přeruší s chybovou hláškou, která může vypadat takto:
NO ROM BASIC – SYSTÉM HALTED
MBR je rozdělena na dvě části. Partition tabulku, která popisuje rozvržení pevného disku a Partition loader, což je program potřebný pro pokračování v bootovacím procesu. Instalace více operačních systémů na jedno PC obyčejně zahrnuje i nahrazení originálního loaderu bootovacím loaderem programu, který uživateli umožňuje vybrat konkrétní disk pro další kroky procesu.
Pokud je tedy MBR správně zaveden do paměti předá BIOS řízení Partition loaderu, který zaujímá většinu z 512 bytů MBR.
Partition loader zjistí v partition tabulce zda je oddíl označen jako aktivní a poté prohlédne první sektor této oblasti, zda obsahuje Boot Rekord. Boot Rekord je také 512 bytů dlouhý a obsahuje tabulku, které popisuje daný oddíl (počet bytů na sektor, počet sektorů na cluster, apd.). Aktivní Boot rekord oddílu je zkontrolován a je vyhledán sektor, ve kterém se nachází první ze souborů operačního systému (v DOSu je to soubor IO.SYS).
Zavádění Windows XP je řízeno souborem NTLDR. Jde o skrytý systémový soubor, který se nachází v kořenovém adresáři systémového oddílu. XP provedou NTLDR ve čtyřech fázích.
- fáze inicializace bootovacího loaderu
- výběr operačního systému
- detekce hardware
- výběr konfigurace
Během inicializační fáze přepne NTLDR procesor z reálného do protected módu, nastaví 32 bitový paměťový mód a zajistí stránkování paměti. Poté zavede vhodné ovladače, které NTDR umožní nahrání souborů z oddílu naformátovaného některým ze systémem podporovaných formátů. Ve Windows XP jsou těmito formáty FAT-16, FAT-32 nebo NTFS.
Pokud je v kořenovém adresáři nalezen soubor BOOT.INI, načte NTLDR jeho obsah do paměti. Když BOOT.INI obsahuje záznamy pro více než jeden operační systém, zastaví NTLDR na tomto bodě bootovací sekvenci a nastavený čas vyčká na uživatelův výběr.
Jestliže soubor BOOT.INI není v kořenovém adresáři nalezen, pokusí se NTLDR pokračovat v bootovací sekvenci nahráním systému z prvního oddílu prvního disku, kterým je běžně C:\
Předpokládejme, že je zaváděným systémem Windows NT, 2000 nebo XP. Stisknutí klávesy F8 v tuto chvíli, pozastaví bootovací sekvenci a zobrazí se nám různé bootovací možnosti jako bezpečný mód nebo poslední známá dobrá konfigurace.
Po každé úspěšně ukončené bootovací sekvenci XP vytvoří kopii seznamu aktuální kombinace ovladačů a systémových nastavení a uloží je jako poslední známou dobrou konfiguraci. Tato uložená data mohou být použita příště, pokud přidání nového zařízení povede k chybnému nabootování.
Pokud je vybraným operačním systémem XP, bude NTLDR pokračovat v bootovacím procesu vyhledáním a načtením programu NTDETECT.COM který provede detekci hardware. NTDETECT.COM vytvoří seznam aktuálně nainstalovaných hardwarových komponent a vrací tento seznam pro pozdější zahrnutí do registrů pod klíčem HKEY_LOCAL_MACHINE\HARDWARE
Když je na počítači definováno více hardwarových profilů, zastaví se NTLDR na tomto místě a zobrazí menu s těmito hardwarovými profily. Pokud využíváme pouze jeden hardwarový profil, přeskočí NTLDR tento krok a menu nezobrazí.
Po výběru hardwarové konfigurace (pokud byla vyžadována) začne NTLDR nahrávat XP kernel NTOSKRNL.EXE
Během nahrávání kernelu (ale před jeho inicializací) řídí počítač i nadále NTLDR. Obrazovka je černá a v její spodní části narůstá bílý pruh. NTLDR v tuto chvíli také zavádí HAL.DLL (Hardware Abstraction Layer), který bude oddělovat kernel od hardware. Oba uvedené soubory se nachází v adresáři WinDir\System32.
NTLDR dále zavede ovladače zařízení, které jsou označeny jako bootovací. Nahráním těchto ovladačů opustí NTLDR řízení počítače. Každý ovladač má svůj záznam ve větvi HKEY_LOCAL_MACHINE\SYSTEM\Services. Některé ovladače mají nastavenu startovací hodnotu SERVICE_BOOT_START a budou zavedeny nyní. S každým nahraným souborem je na obrazovku vytištěna tečka (ledaže je zapnut přepínač /SOS, který způsobí vypsání přímo názvů souborů).
NTOSKRNL je během bootovacího procesu vykonán ve dvou fázích - fáze 0 a fáze 1.
Během fáze 0 vypíná XP přerušení a znovu je zapíná před startem fáze 1. Je zavolán HAL aby ukončil ovládání přerušení a jsou inicializovány paměťový manažer, objektový manažer, manažer procesů a bezpečnostní monitor. Fáze 1 začíná ve chvíli kdy je HAL zavolán pro obnovení zpracování přerušení přicházejících od zařízení. Pokud je v počítači přítomno více procesorů, jsou zinicializovány na tomto místě.
Všechny výkonné subsystémy jsou znovu inicializovány v následujícím pořadí:
- Object Manager
- Executive
- Microkernel
- Security Reference Monitor
- Memory manager
- Čachr Manager
- LPCS
- I/O Manager
- Process Manager
Inicializací I/O manažeru začíná proces nahrávání všech souborů systémových ovladačů. Nezdar při zavádění ovladačů může vést k rebootu a zkoušce startu s využitím hodnot uložených jako poslední známá správná konfigurace.
Poslední úkol pro fázi 1 je spuštění SMSS (Session Manager Subsystem), který je zodpovědný za vytvoření uživatelského viditelného prostředí Windows.
SMSS běží v uživatelském módu, ale na rozdíl od jiných aplikací v tomto módu, je SMSS nedílná součást operačního systému. Je také nativní aplikací (užívá jen výkonné vnitřní funkce). Tyto dvě vlastnosti umožňují SMSS spustit grafický subsystém a přihlašovací proces, zavedením ovladače Win32k.sys. Po nastartování Win32k.sys se obrazovka přepne do grafického režimu a subsystém služeb nastartuje všechny služby označené jako autostart. Všechna zařízení a služby nyní běží a bootovací proces se považuje za zdárně dokončený. Aktuální konfigurace se uloží jako poslední známá dobrá konfigurace.
Nyní zbývá pouze přihlášení uživatele do systému, které nám zprostředkuje soubor WINLOGON.EXE, jež je nahrán kernelem jako služba a je následován souborem LSASS.EXE (Local Security Authotity), který zobrazí přihlašovací dialog. Tento dialog se objeví přibližně ve stejnou chvíli, kdy subsystém služeb nastartuje síťové služby.
Tímto bych prozatím této článek ukončil. Doufám, že se mi podařilo přiblížit vám alespoň trochu procesy, které běží v počítači při jeho startu. Příště se společně podíváme na to, co se v počítači děje při přihlašování uživatele a po jeho přihlášení. Koukneme se trochu blíže na registry Windows a ukážeme si možnosti, které se nám nabízí pro automatické spuštění kódu při startu systému. Pokud tedy nevíte jak zajistit automatické spuštění trojského koně nebo jak podobnou havěť odhalit ve svém PC, nenechte si následující část ujít.
Zdroj:
Dotnetjunkies
.cCuMiNn.