5
kapitola
Spouštení a vypínání 55
Obsah kapitoly: 5.1 Proces spouštení.................................................................................................. 270 5.2 Fešení potíží se startem a spouštením............................................................... 292 5.3 Vypnutí................................................................................................................. 304 5.4 Záver .................................................................................................................... 306
270
Kapitola 5 – Spouštgní a vypínání
V této kapitole si popíšeme kroky pot½ebné ke spuštµní systému Microsoft Windows a volby, které mohou spouštµní systému ovlivnit. Budete-li rozumµt podrobnostem spouštµcího procesu, snáze se vám budou diagnostikovat potíže, jež se v této fázi mohou projevit. Pak si vysvµtlíme vµci, které se mohou bµhem procesu spouštµní pokazit, a seznámíme se s jejich ½ešením. Nakonec si ukážeme, k ²emu dochází p½i ½ádném vypínání systému.
5.1 Proces spouštgní V rámci popisu startování (bootování) Windows za²neme instalací systému a budeme pokra²ovat vykonáváním podp¾rných soubor¾ spouštµní. Zásadní sou²ástí procesu spouštµní jsou ovlada²e za½ízení, takže si vysvµtlíme zp¾sob, jakým se ½ídí místo jejich zavádµní a inicializace v procesu spouštµní. Dále si popíšeme, jak subsystémy výkonné ²ásti inicializují a jádro spouští tu ²ást Windows, která pracuje v uživatelském režimu, nastartováním procesu správce relací (SMSS.exe), subsystému Windows a p½ihlašovacího procesu (Winlogon). P½itom si zd¾razníme místa, v nichž se na obrazovce objevuje r¾zný text pomáhající bµhem spouštµní Windows rozpoznat ur²itý interní proces podle toho, co vidíte na obrazovce. Po²áte²ní fáze procesu spouštµní se na systémech x86 a x64 výraznµ odlišují od systém¾ IA64. Následující oddíl popisuje ²ásti spouštµcího procesu, které jsou specifické pro architektury x86 a x64. Dále je oddíl popisující ty ²ásti spouštµcího procesu, jež jsou specifické pro IA64.
Podátední fáze spouštgní na x86 a x64 Proces spouštµní Windows neza²íná až v okamžiku, když zapnete po²íta² nebo stisknete tla²ítko resetu. Za²íná již p½i instalaci Windows na po²íta². V ur²itém okamžiku vykonávání instala²ního programu Windows se primární pevný disk systému vybaví kódem, který je sou²ástí spouštµcího procesu. Ještµ než se ale dostaneme k tomu, co takový kód dµlá, podívejme se na to, jak a kam tento kód Windows umisÆují na disk. Již od dávných dob systému MS-DOS existoval na systémech x86 standard ur²ující, jak se fyzické jednotky dµlí na svazky. Opera²ní systémy spole²nosti Microsoft dµlí pevné disky na diskrétní oblasti ozna²ované za oddíly (partitions) a k naformátování každého takového oddílu na svazek využívají souborové systémy (nap½. FAT nebo NTFS). Pevný disk m¾že obsahovat až ²ty½i primární oddíly. Protože toto schéma rozdµlení by omezovalo disk na ²ty½i svazky, dokáže speciální typ oddílu, ozna²ovaný za rozší»ený oddíl, alokovat další až ²ty½i oddíly v rámci každého z primárních oddíl¾. Rozší½ené oddíly mohou obsahovat rozší½ené oddíly, které mohou obsahovat další rozší½ené oddíly atd., takže po²et svazk¾, které m¾že opera²ní systém umístit na disk, je v zásadµ nekone²ný. Obrázek 5.1 zachycuje p½íklad rozložení pevného disku a tabulka 5.1 shrnuje soubory ú²astnící se procesu spouštµní na architekturách x86 a x64. (O tom, jak Windows pracují s oddíly, se více dozvíte v kapitole 10, která se zabývá správou úložišÆ.) Fyzické disky se adresují v jednotkách ozna²ovaných za sektory. Sektor pevného disku na PC kompatibilním se specifikací IBM má vµtšinou 512 bajt¾. Nástroje, které p½ipravují pevné disky na definice svazk¾, v²etnµ utility Fdisk systému MS-DOS nebo instala²ního programu Windows, zapisují na první sektor pevného disku ur²i-
Proces spouštgní
271
Záznamy MBR zapisované nástroji vytvá½ení oddíl¾ od spole²nosti Microsoft, jako jsou ty integrované do instala²ního programu Windows a modulu snap-in správy disk¾ konzoly MMC, procházejí podobným procesem na²ítání a p½enášení ½ízení. Kód MBR nejprve prochází tabulkou primárního oddílu, dokud nenajde oddíl obsahující p½íznak signalizující, že je spustitelný. Jakmile MBR nalezne alespo¹ jeden takový p½íznak, na²te první sektor ozna²eného oddílu do pamµti a p½edá ½ízení kódu daného oddílu. Tento typ oddílu se ozna²uje za spoušt³cí oddíl (boot partition) a první sektor takového oddílu se nazývá spoušt³cí sektor (boot sector). Svazek definovaný pro tento spouštµcí oddíl se nazývá systémový svazek (system volume). TABULKA 5.1: Komponenty spouötÏcÌho procesu systÈm˘ x86 a x64 Komponenta
Vykonávání procesoru
Zodpovgdnosti
Kód hlavního spouštgcí- 16bitový reálný režim ho záznamu (Master Boot Record – MBR)
Nadítá a zavádí spouštgcí sektory oddílu.
Spouštgcí (boot) sektor
16bitový reálný režim
Nadítá koenový adresá, aby bylo možné zavést Ntldr.
Ntldr
16bitový reálný režim a 32bitový nebo 64bitový chrángný režim; zapíná stránkování
Nadítá Boot.ini, nabízí spouštgcí nabídku a nahrává Ntoskrnl.exe, Bootvid.dll, Hal.dll a ovladade zaízení zavádgné pi startování. Spouští-li se 32bitová instalace, pepne do 32bitového chrángného režimu; je-li spouštgna 64bitová instalace, pepne do 64bitového dlouhého režimu.
Ntdetect.com
16bitový reálný režim
Zajišuje detekci hardwaru pro Ntldr.
Ntbootdd.sys
Chrángný režim
Ovladad zaízení používaný pro operace I/O na systémech SCSI a ATA (Advanced Technology Attachment), kde se nepoužívá BIOS.
Ntoskrnl.exe
Chrángný režim se strán- Inicializuje subsystémy výkonné dásti a ovlakováním dade zaízení zavádgné pi prvotním spouštgní a startu systému, pipravuje systém na provozování nativních aplikací a spouští SMSS.exe.
Hal.dll
Chrángný režim se strán- Knihovna DLL režimu jádra, která zajišuje kováním rozhraní mezi Ntoksnrl a ovladadi hardwaru.
Spoušt?ní a vypínání
tá data ozna²ovaná za hlavní spouštµcí záznam (Master Boot Record – MBR). (Oddíly MBR si vysvµtlíme v kapitole 10.) Záznam MBR zahrnuje pevnµ daný prostor obsahující vykonatelné instrukce (ozna²ované za spoušt³cí kód) a tabulku (nazývanou tabulka oddíl¼) se ²ty½mi položkami definujícími umístµní primárních oddíl¾ na disku. Když se spouští po²íta² kompatibilní se specifikací IBM, tak jako první vykoná kód ozna²ovaný za BIOS – ten je zakódován do pamµti ROM po²íta²e. BIOS vybere spouštµcí za½ízení, na²te MBR tohoto za½ízení do pamµti a p½enese ½ízení na kód obsažený v daném záznamu MBR.
272
Kapitola 5 – Spouštgní a vypínání
Komponenta
Vykonávání procesoru
SMSS
Nativní aplikace
Zodpovgdnosti Zavádí subsystém Windows vdetng Win32k.sys a Csrss.exe a spouští proces Winlogon.
Winlogon
Nativní aplikace
Spouští správce ízení služeb (SCM), spouští subsystém lokálního zabezpedení (Local Security Subsystem – LSASS) a zobrazuje dialogové okno interaktivního pihlášení.
Správce ízení služeb (Service Control Manager – SCM)
Nativní aplikace
Zavádí a inicializuje automaticky spouštgné ovladade zaízení a služby Windows.
Opera²ní systémy vµtšinou zapisují spouštµcí sektory na disk bez akce uživatele. Když kup½íkladu instala²ní program Windows zapisuje na pevný disk MBR, zapisuje také spouštµcí sektor na první spustitelný oddíl disku. Bµhem instalace systému MSDOS, Windows ME, Windows 98 nebo Windows 95 mohlo dojít k vytvo½ení spouštµcího sektoru systému MS-DOS. Instala²ní program Windows provµ½uje, zda je spouštµcí sektor p½episovaný spouštµcím sektorem Windows platným spouštµcím sektorem systému MS-DOS. Pokud ano, instala²ní program Windows zkopíruje obsah tohoto spouštµcího sektoru do souboru nazvaného Bootsect.dos v ko½enovém adresá½i p½íslušného oddílu.
OBRÁZEK 5.1: Ukázkové rozložení pevného disku
P½ed zápisem do spouštµcího sektoru oddílu si instala²ní program Windows zajistí, aby byl daný oddíl naformátován systémem soubor¾, který Windows podporují (FAT, FAT32 nebo NTFS) – naformátuje spouštµcí oddíl (a jakýkoli jiný oddíl) vámi zadaným systémem soubor¾. Jsou-li oddíly již naformátované, m¾žete instala²nímu programu ½íci, aby tento krok p½esko²il. Jakmile instala²ní program naformátuje
Proces spouštgní
273
spouštµcí oddíl, zkopíruje na nµj (tedy na systémový svazek) soubory používané Windows. To zahrnuje i dva soubory, které jsou sou²ástí spouštµcí sekvence, Ntldr a Ntdetect.com.
[boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(1) \WINDOWS="Microsoft Windows XP Professional" fastdetect C:\= "Microsoft Windows"
Všimnµte si, že je v ukázkovém souboru cesta k adresá½i Windows zadána pomocí speciální syntaxe odpovídající konvenci Advanced RISC Computing (ARC) pro vytvá½ení názv¾. Systém Windows používá t½i varianty této syntaxe. První, uvedená v p½edchozí ukázce kódu, je syntaxe multi(). Ta ½íká Windows, že mají pomocí funkcí BIOS INT 13 zavést systémové soubory. Syntaxe multi() je tu tedy uvedena, pokud má disk, na nµmž se daný spouštµcí svazek nachází, ½adi² podporující INT13. Syntaxe multi() má následující formát: multi(W)disk(X)rdisk(Y)partition(Z) W je ²íslo ½adi²e disku (ozna²ované také za po½adové ²íslo) a vµtšinou má hodnotu 0. X je v syntaxi multi() vždy 0. Y specifikuje fyzický pevný disk p½ipojený k ½adi²i W.
V p½ípadµ ½adi²¾ ATA je toto ²íslo vµtšinou v rozsahu od 0 do 3. V p½ípadµ ½adi²¾ SCSI se vµtšinou jedná o hodnoty mezi 0 a 15. Z p½edstavuje ²íslo toho oddílu na fyzickém disku, jenž odpovídá spouštµcímu svazku. Prvnímu oddílu se p½i½azuje ²íslo 1. Syntaxe scsi() ARC informuje Windows, že má pro p½ístup k soubor¾m na daném spouštµcím svazku využívat služby diskových operací I/O zajišÆovaných Ntbootdd.sys (jak si za okamžik popíšeme). Formát syntaxe scsi() vypadá takto: scsi(W)disk(X)rdisk(Y)partition(Z)
V této syntaxi p½edstavuje W ²íslo ½adi²e a X je fyzický pevný disk p½ipojený k ½adi²i, což je vµtšinou hodnota mezi 0 a 15. Y specifikuje ²íslo logické jednotky (Logical Unit Number – LUN) SCSI disku, který obsahuje spouštµcí svazek a má vµtšinou hodnotu 0. Kone²nµ Z je oddíl odpovídající spouštµcímu svazku s ²íslováním za²ínajícím od 1. Poslední syntaxí používanou systémem Windows je syntaxe signature(). Ta ½íká Windows, že mají nalézt disk s podpisem odpovídajícím první hodnotµ v závorkách, bez ohledu na ²íslo ½adi²e p½idružené tomuto disku, a pro p½ístup k tomuto spouštµcímu svazku použít Ntbootdd.sys. Podpis (signatura) disku je globálnµ jednozna²ný
Spoušt?ní a vypínání
Další úlohou instala²ního programu je vytvo½it v ko½enovém adresá½i systémového svazku soubor spouštµcí nabídky, Boot.ini. Ten obsahuje volby spuštµní té verze systému Windows, kterou právµ instalujete, a také již d½íve instalovaných Windows. Jestliže Bootsect.dos obsahuje platný spouštµcí sektor systému MS-DOS, jednou z položek vytvo½ených v Boot.ini bude spuštµní systému MS-DOS. Následující výstup ukazuje p½íklad souboru Boot.ini z po²íta²e s duálním spouštµním, kde byl systém MS-DOS instalován p½ed Windows XP:
274
Kapitola 5 – Spouštgní a vypínání
identifikátor (Globally Unique Identifier – GUID), který instala²ní program Windows získává z údaj¾ v MBR a zapisuje na disk. Syntaxe signature() vypadá takto: signature(V)disk(X)rdisk(Y)partition(Z) V je 32bitový hexadecimální podpis disku, který jej identifikuje. X je fyzický pevný
disk s ur²itým podpisem, který m¾že být p½ipojen k libovolnému ½adi²i v systému. Y je vždy 0 a Z je ²íslo oddílu, na nµmž se nachází spouštµcí jednotka.
Windows používají syntaxi signature() v následujících p½ípadech: Spouštµcí svazek je vµtší než 7,8 GB a rozší½ené funkce INT-13 systému BIOS (jež se používají pro p½ístup k disku v ²ástech za hranicí 7,8 GB) nemohou p½istupovat k celému disku. BIOS nepodporuje rozší½ené instrukce INT-13.
Spouštgcí sektor a Ntldr na systémech x86/x64 P½ed zápisem spouštµcího sektoru musí instala²ní program znát formát oddílu, protože obsah spouštµcího sektoru na nµm závisí. Pokud má spouštµcí oddíl kup½íkladu formát FAT, Windows zapíší do spouštµcího sektoru kód, který systému soubor¾ FAT rozumí. Jestliže je ale daný oddíl ve formátu NTFS, Windows zapíší kód podporující NTFS. Kód spouštµcího sektoru má za úkol p½edat systému Windows informace o struktu½e a formátu daného svazku a na²íst soubor Ntldr z ko½enového adresá½e svého svazku. To znamená, že kód spouštµcího sektoru obsahuje právµ tolik kódu systému soubor¾ pouze pro ²tení, kolik je zapot½ebí ke splnµní této úlohy. Jakmile kód spouštµcího sektoru zavede do pamµti Ntldr, p½edá ½ízení vstupnímu bodu Ntldr. Nedokáže-li kód spouštµcího sektoru nalézt v ko½enovém adresá½i svého svazku Ntldr, zobrazí zprávu „BOOT: Couldn’t find NTLDRP“ (nelze nalézt NTLDRP), jedná-li se o souborový systém FAT, nebo „NTLDR is missing“ (chybí NTLDR), je-li souborovým systémem NTFS. Zavadµ² Ntldr za²íná existovat v okamžiku, kdy se systém vykonává v ur²itém opera²ním režimu x86 ozna²ovaném za reálný režim (real mode). V reálném režimu nedochází k žádnému p½ekladu pamµÆových adres z virtuálních na fyzické. To znamená, že programy využívající nµjaké pamµÆové adresy je interpretují jako fyzické adresy a že je p½ístupný pouze první megabajt fyzické pamµti po²íta²e. V prost½edí reálného režimu se vykonávají jednoduché programy systému MS-DOS. První akcí Ntldr je ale p½epnutí systému do chrán³ného režimu (protected mode). V tomto okamžiku stále nedochází k p½ekladu virtuálních adres na fyzické adresy, zp½ístupní se však celá 32bitovµ adresovatelná pamµÆ. Jakmile je systém v chránµném režimu, m¾že Ntldr p½istupovat k celé fyzické pamµti. Po vytvo½ení dostate²ného po²tu tabulek stránek, aby bylo možné p½istupovat k pamµti pod 16 MB se zapnutým stránkováním, Ntldr stránkování zapne (aktivuje). Právµ v chránµném režimu s aktivním stránkováním bµží za normálního stavu i Windows. Jakmile zavadµ² Ntldr zapne stránkování, je plnµ provozuschopný. P½i p½ístupu k systémovým a spouštµcím disk¾m IDE a k displeji však stále využívá funkce dodávané spouštµcím kódem. Funkce spouštµcího kódu krátce vypnou stránkování a p½epnou procesor zpµt do režimu, v nµmž lze vykonávat služby poskytované systémem BIOS. Pokud je disk, obsahující spouštµcí svazek, formátu SCSI a nep½ístupný prost½ednictvím podp¾rného firmwaru v BIOSu, zavede Ntldr soubor nazvaný
Proces spouštgní
275
Ntbootdd.sys a p½i p½ístupu k disku jej využívá místo funkcí spouštµcího kódu. Ntbootdd.sys je kopií ovlada²e miniportu SCSI, který Windows používají pro p½ístup
ke spouštµcímu disku p½i své normální ²innosti. (Více údaj¾ o ovlada²ích disk¾ najdete v kapitole 10.) Ntldr dále na²ítá pomocí vestavµného kódu systému soubor¾ soubor Boot.ini v ko½enovém adresá½i. Podobnµ jako kód spouštµcího sektoru obsahuje Ntldr kód p½ístupu pouze pro ²tení k systém¾m NTFS a FAT; na rozdíl od kódu spouštµcího sektoru však kód systému soubor¾ Ntldr dokáže ²íst i podadresá½e.
a p½edáním ½ízení kódu v jádru, který spustí chod uspaného systému. Tento kód zodpovídá za restartování ovlada²¾, jež byly aktivní v okamžiku vypínání systému. Soubor Hiberfil.sys bude platný, pouze pokud byl po²íta² p½i posledním vypínání uspán (více se o režimu spánku dozvíte v oddílu „Správce napájení“ v kapitole 11). Nachází-li se v souboru Boot.ini více než jedna položka volby spuštµní, nabídne zavadµ² uživateli menu volby spuštµní. (Je-li tu jen jedna položka, tak Ntldr tuto nabídku p½esko²í a postoupí k zobrazení lišty postupu spouštµní.) Položky voleb v souboru Boot.ini nasmµrují Ntldr na oddíl, na nµmž se nachází systémový adresá½ Windows (vµtšinou \Windows) vybrané instalace. Tento oddíl m¾že být stejný jako spouštµcí oddíl, nebo se m¾že jednat o jiný primární oddíl. Odkazuje-li se daná položka Boot.ini na instalaci systému MS-DOS (když tedy za systémový oddíl ozna²uje C:\), na²te Ntldr do pamµti obsah souboru Bootsect.dos, p½epne se zpµt do 16bitového reálného režimu a zavolá kód MBR v Bootsect.dos. Tato akce zp¾sobí vykonání kódu v Bootsect.dos, jako by byl MBR na²ten z disku. Kód v Bootsect.dos pokra²uje ve spouštµní specifickém pro systém MS-DOS, jak se používá p½i spouštµní Microsoft Windows ME, Windows 98 nebo Windows 95 na po²íta²i, kde jsou tyto opera²ní systémy instalovány spole²nµ s jinými Windows. Položky v souboru Boot.ini mohou zahrnovat volitelné argumenty, které interpretuje Ntldr a další komponenty ú²astnící se procesu spouštµní. Tabulka 5.2 obsahuje úplný seznam tµchto voleb a jejich vlivu. Nástroj Bootcfg.exe, poprvé uvedený ve Windows XP, nabízí pohodlné prost½edí umož¹ující nastavit ½adu tµchto p½epína²¾. Všechny volby obsažené v Boot.ini se ukládají do hodnoty registru HKLM\System\CurrentControlSet\Control\SystemStartOptions. TABULKA 5.2: Moûnosti spouötÏnÌ Kvalifikátor spouštgní
Význam
/3GB
Zvyšuje velikost adresového prostoru pro uživatelské procesy ze 2 GB na 3 GB (a omezuje tedy velikost systémového prostoru ze 2 GB na 1 GB). Poskytnutí vgtšího adresového prostoru mže zvýšit výkonnost aplikací intenzivng využívajících virtuální pamg, jako jsou nap. databázové servery. Aby mohla aplikace využít tohoto prvku, musejí být ale naplngny dvg dodatedné podmínky: Na systému musí bgžet Windows XP, Windows Server 2003, Windows 2000 Advanced Server nebo Datacenter Server a soubor EXE dané aplikace musí být oznaden píznakem podpory 3GB prostoru (platí pouze pro 32bitové systémy). (Další informace najdete v oddílu „Rozvržení adresového prostoru“ v kapitole 7.)
Spoušt?ní a vypínání
Ntldr dále vymaže obrazovku. Je-li v ko½enu systémového svazku platný soubor Hiberfil.sys, zkrátí proces spouštµní na²tením obsahu tohoto souboru do pamµti
276
Kapitola 5 – Spouštgní a vypínání
Kvalifikátor spouštgní
Význam
/BASEVIDEO
Zpsobuje, že systém Windows používá pro operace v režimu GUI (grafickém) standardní ovladad displeje VGA.
/BAUDRATE=
Aktivuje ladgní v režimu jádra a specifikuje pekrytí výchozí rychlosti komunikace (19 200), na které se vzdálený hostitel debuggeru jádra pipojí. Píklad: /BAUDRATE=115200.
/BOOTLOG
Systém Windows zapíše protokol spouštgní do souboru %SystemRoot%\Ntbtlog.txt.
/BOOTLOGO
Po zadání tohoto pepínade zobrazí Windows XP nebo Windows Server 2003 instalovatelnou úvodní obrazovku místo standardní úvodní obrazovky. Nejprve vytvote 16barevnou (obsahující 16 libovolných barev) bitovou mapu 640 × 480 a uložte ji do adresáe Windows pod názvem Boot.bmp. Pak doplyte do boot.ini volbu „/bootlogo /noguiboot“.
/BREAK
Zpsobí, že se vrstva abstrakce hardwaru (HAL) zastaví pi své inicializaci v bodu perušení. První vgcí, kterou jádro Windows dglá pi inicializaci, je právg inicializace vrstvy HAL, takže tento bod perušení je nejdívgjší možný. HAL bude donekonedna dekat v daném bodu perušení na vytvoení pipojení debuggeru jádra. Je-li tento pepínad použit bez pepínade /DEBUG, vyvolá systém modrou obrazovku s kódem STOP hodnoty 0x00000078 ( PHASE0_EXCEPTION).
/BURNMEMORY=
Specifikuje množství pamgti, kterou Windows nemohou používat (podobá se pepínadi /MAXMEM). Tento údaj se zadává v megabajtech. Píklad: /BURNMEMORY=128 bude znamenat, že Windows nemohou použít 128 MB z celkového množství fyzické pamgti na podítadi.
/CHANNEL=
Používá se ve spojení s /DEBUGPORT=1394 ke specifikaci kanálu IEEE 1394, kterým potede komunikace ladgní jádra. Mže se jednat o libovolné díslo od 0 do 62 a není-li specificky nastaveno, využije se výchozí hodnota 0.
/CLKLVL
Zpsobí, že se standardní víceprocesorová vrstva HAL architektury x86 (Halmps.dll) nakonfiguruje pro systémové hodiny spouštgné úrovní (level-sensitive) a nikoli hranou (edge-triggered) hodiny. Levelsensitive a edge-triggered jsou pojmy používané k popisu typ hardwarových perušení.
/CMDCONS
Pedává se pi nábghu do konzoly pro zotavení (Recovery Console – popsáno dále v této kapitole).
/CRASHDEBUG
Debugger jádra se zavede pi spouštgní systému, zstane ale neaktivní, pokud nedojde ke zhroucení systému. Sériový port využívaný debuggerem jádra tak bude k dispozici systému až do jeho zhroucení (to je rozdíl oproti /DEBUG, kdy debugger jádra využívá zadaný sériový port po celou dobu systémové relace).
/DEBUG
Aktivuje ladgní v režimu jádra.
Kvalifikátor spouštgní
Význam
/DEBUGPORT=
Aktivuje ladgní v režimu jádra a pepisuje výchozí sériový port (obvykle COM2 na systémech s pinejmenším dvgma sériovými porty), k ngmuž je pipojen vzdálený hostitel debuggeru jádra. Windows XP a Windows Server 2003 podporují také ladgní prostednictvím port IEEE 1394. Píklady: /DEBUGPORT=COM2, /DEBUGPORT=1394.
/EXECUTE
Deaktivuje ochranu ped vykonáváním. Další informace najdete u pepínade /NOEXECUTE.
/FASTDETECT
Výchozí spouštgcí volba Windows. Nahrazuje pepínad /NOSERIALMICE systému Windows NT 4. Dvod existence tohoto kvalifikátoru (místo toho, aby NTDETECT prostg tuto operaci provádgl standardng) je dán tím, že NTDETECT musí podporovat spouštgní Windows NT 4. Ovladade zaízení Plug and Play systému Windows vykonávají detekci paralelních a sériových zaízení, systém Windows NT 4 se s tím ale spoléhá na NTDETECT. Proto zadání /FASTDETECT zpsobí, že NTDETECT peskodí výdet paralelních a sériových zaízení (akce, které nejsou pro spouštgní Windows nezbytné). Když pepínad není zadán, NTDETECT zmíngný výdet zajistí (což je nezbytné pro spouštgní Windows NT 4).
/INTAFFINITY
Híká standardní víceprocesorové vrstvg HAL architektury x86 (Halmps.dll), že má nastavit takové afinity perušení, aby perušení pijímal pouze procesor s nejvyšším díslem. Bez tohoto pepínade využije HAL své výchozí chování spodívající v tom, že perušení pijímají všechny procesory.
/LASTKNOWNGOOD
Systém se spustí, jako by byla vybrána volba LastKnownGood (Poslední známá funkdní konfigurace).
/MAXMEM=
Omezuje systém Windows tím zpsobem, že bude ignorovat (nebude používat) fyzickou pamg za zadaným množstvím. Toto díslo pedstavuje megabajty. Píklad: /MAXMEM=64 omezí systém na využívání prvních 64 MB fyzické pamgti, i když je jí k dispozici více.
/MAXPROCSPERCLUSTER= V pípadg standardní víceprocesorové vrstvy HAL architektury x86 (Halmps.dll) si vynucuje adresování adide APIC (Advanced Pro-
grammable Interrupt Controller) v režimu cluster (což není podporováno na systémech s externím adidem perušení APIC 82489DX). /MININT
Tuto volbu používá pedinstaladní prostedí (Preinstallation Environment – PE) Windows a zpsobuje, že správce konfigurace zavádí podregistr SYSTEM jako nestálý, takže zmgny v ngm provádgné v pamgti se neukládají do obrazu podregistru.
/NODEBUG
Zabrayuje inicializaci ladgní v režimu jádra. Pekrývá specifikaci všech ostatních tí pepínad souvisejících s ladgním, /DEBUG, /DEBUGPORT a /BAUDRATE.
277
Spoušt?ní a vypínání
Proces spouštgní
278
Kapitola 5 – Spouštgní a vypínání
Kvalifikátor spouštgní
Význam
/NOLOWMEM
Vyžaduje pítomnost pepínade /PAE a systém musí mít navíc více než 4 GB fyzické pamgti. Jsou-li tyto podmínky naplngny, pak nebude ta verze jádra Windows, která podporuje PAE ( Ntkrnlpa.exe), používat první 4 GB fyzické pamgti. Místo toho bude zavádgt všechny aplikace a ovladade zaízení a alokovat všechny pamgové fondy až nad touto hranicí. Tento pepínad je užitedný pouze k testování kompatibility ovladad zaízení se systémy vybavenými velkou pamgtí.
/KERNEL= /HAL=
Dovoluje vám pekrýt pro Ntldr výchozí název obrazu jádra (Ntoskrnl.exe) a/nebo vrstvy HAL (Hal.dll). Tyto volby jsou užitedné pro alternování mezi ovgovacím prostedím jádra a volným (bgžng dodávaným) prostedím jádra nebo i k manuální volbg jiné vrstvy HAL. Chcete-li spustit ovgovací prostedí, jež sestává distg z ovgovaného jádra a HAL, což vgtšinou plng postaduje k testování ovladad, postupujte na systému s instalovaným volným sestavením následovng: 1. Zkopírujte ovgované verze obraz jádra z CD ovgovaného sestavení do adresáe \Windows\System32 a obrazm zadejte jiné názvy, než jsou výchozí. Jste-li kupíkladu na jednoprocesorovém systému, zkopírujte Ntoskrnl.exe jako Ntoschk.exe a Ntkrnlpa.exe jako Ntoschkpa.exe. Jste-li na víceprocesorovém systému, zkopírujte Ntkrnlmp.exe jako Ntoschk.exe a Ntkrpamp.exe jako Ntoschkpa.exe. Název souboru jádra musí být krátký, tedy ve stylu 8.3. 2. Zkopírujte ovgované verze píslušné vrstvy HAL vyžadované vaším systémem z \I386\Driver.cab na CD ovgovaného sestavení do adresáe \Windows\System32 a soubor pejmenujte na Halchk.dll. Chcete-li zjistit, jakou vrstvu HAL máte zkopírovat, otevete si \Windows\Repair\Setup.log a vyhledejte Hal.dll; najdete tu ádek jako \WINDOWS\system32\hal.dll=„halacpi.dll“, „1d8a1“. Název hned za rovnítkem pedstavuje soubor HAL, který musíte zkopírovat. Název souboru vrstvy HAL musí být krátký, tedy ve stylu 8.3. 3. Vytvote kopii výchozího ádku v systémovém souboru Boot.ini. 4. Do etgzce popisu volby spouštgní zadejte text indikující nový výbgr odpovídající prostedí ovgovaného sestavení (kupíkladu „Windows XP Professional Checked“). 5. Na konec ádku nové volby zadejte následující: /KERNEL=NTOSCHK.EXE /HAL=HALCHK.DLL
Když se nyní v procesu spouštgní zobrazí nabídka spuštgní, mžete zvolit novg vytvoenou položku a spustit ovgované prostedí nebo zstat u položky zajišující spuštgní volného sestavení.
Kvalifikátor spouštgní
Význam
/NOGUIBOOT
Instruuje systém Windows v tom smyslu, že nemá inicializovat ovladad VGA videa zodpovgdný za pedstavení bitmapové grafiky bghem procesu spouštgní. Tento ovladad se používá k zobrazování informací o postupu spouštgní, takže po jeho zákazu nebude moci systém Windows tyto informace uvádgt.
/NOPAE
Nutí Ntldr zavádgt takovou verzi jádra Windows, která nepodporuje PAE (Physical Address Extension – rozšíení fyzické adresy), i když je u daného systému detekována podpora instrukcí PAE platformy x86 a má více než 4 GB fyzické pamgti.
/NOEXECUTE
Tato volba je k dispozici pouze na 32bitové verzi Windows pi bghu na procesorech AMD64 a za situace, kdy je zárovey aktivní PAE (vysvgtleno dále v popisu pepínade /PAE). Aktivuje ochranu ped vykonáváním, kdy správce pamgti oznaduje za nevykonatelné stránky obsahující data, takže je nelze vykonat jako kód. To mže být užitedné k zabrángní zneužití chyb petedení bufferu zákeným softwarem. Ochrana ped vykonáváním je na 64bitových verzích Windows bgžících na procesorech AMD64 vždy aktivní. Existují dtyi modifikátory, jež lze piadit pepínadi /NOEXECUTE: =OPTIN, =OPTOUT, =ALWAYSON, =ALWAYSOFF. Popis jejich chování najdete v kapitole 7.
/NOSERIALMICE= Zastaralý kvalifikátor Windows NT 4 – nahrazen neexistencí pepína[COMx | COMx,y,z...] de /FASTDETECT. Deaktivuje detekci sériové myši na zadaných por-
tech COM. Tento pepínad se používal, když jste mgli bghem spouštgní systému k ngkterému ze sériových port pipojené jiné zaízení než myš. Použití /NOSERIALMICE bez zadání portu COM deaktivuje detekci sériové myši na všech portech COM. Další informace najdete v dlánku Microsoft Knowledge Base s díslem Q131976. /NUMPROC=
Specifikuje podet procesor (CPU), které lze využívat na víceprocesorových systémech. Píklad: /NUMPROC=2 na dtyprocesorovém systému zabrání systému Windows ve využívání dvou ze dty instalovaných procesor.
/ONECPU
Zpsobí, že systém Windows používá jen jeden CPU na víceprocesorovém systému.
/PAE
Ntldr zavede Ntkrnlpa.exe, což je urditá verze jádra pro architek-
turu x86, která dokáže využívat instrukce PAE platformy x86. Tato verze PAE jádra nabídne ovladadm zaízení 64bitové fyzické adresy, což je užitedné k testování podpory systém s velkou pamgtí ze strany ovladad zaízení. /PCILOCK
Zabrání Windows v dynamickém piazování prostedk IO/IRQ zaízením PCI a nechá konfiguraci zaízení na systému BIOS. Další informace najdete v dlánku Microsoft Knowledge Base díslo Q148501.
/RDPATH=
Zadává cestu k souboru obrazu systémového disku (System Disk Image – SDI), který se mže nacházet na síti a používá se ke spuštgní. &asto se aplikuje ve spojení s píznakem /RDIMAGEOFFSET=. Ten zavadgdi NTLDR urduje, kde v zadaném souboru zadíná obraz systému.
279
Spoušt?ní a vypínání
Proces spouštgní
280
Kapitola 5 – Spouštgní a vypínání
Kvalifikátor spouštgní
Význam
/REDIRECT
Uvedeno prvng v systému Windows Server 2003. Windows pak aktivují Emergency Management Services (EMS), které hlásí údaje o spouštgní a pijímají píkazy správy pes sériový port. Hádky redirect= a redirectbaudrate= v oddílu [boot loader] souboru Boot.ini specifikujete sériový port a rychlost penosu používanou ve spojení s EMS.
/SAFEBOOT:
Specifikuje volby pro spouštgní v nouzovém režimu. Tuto volbu asi nikdy nebudete muset zadávat manuálng, protože Ntldr ji zadá za vás, když k zadání spuštgní v nouzovém režimu použijete nabídku zobrazenou klávesou F8. (Spuštgní v nouzovém režimu je takové, kdy systém Windows zavádí pouze ovladade a služby specifikované názvy nebo skupinami v klídích registru Minimal nebo Network pod HKLM\SYSTEM\ CurrentControlSet\Control\SafeBoot.) Za dvojtedkou musíte zadat jeden ze tí dodatedných pepínad: MINIMAL, NETWORK nebo DSREPAIR. Píznak MINIMAL a NETWORK odpovídají spouštgní v bezpedném režimu bez podpory sítg resp. s podporou sítg. Pepínad DSREPAIR (Directory Services Repair – oprava adresáových služeb) zpsobí spuštgní Windows v takovém režimu, kdy je adresáová služba Active Directory offline (vypnutá) a její databáze není otevená. To umožní správci provádgt na databázi diagnostické, opravné nebo obnovující funkce. Další volbou, kterou mžete doplnit, je (ALTERNATESHELL). Heknete tím systému Windows, že má jako grafické prostedí použít program zadaný hodnotou HKLM\SYSTEM\CurrentControlSet\SafeBoot\AlternateShell
a nikoli implicitní program, jímž je Windows Explorer. /SCSIORDINAL:
Smgruje systém Windows na identifikátor SCSI daného adide. (Když do systému doplníte nové zaízení SCSI s vestavgným adidem SCSI, mže dojít ke zmgng identifikátoru SCSI adide.) Další informace získáte ze dlánku Microsoft Knowledge Base díslo Q103625.
/SDIBOOT=
Používá se v systémech Windows XP Embedded k tomu, aby se systém spouštgl z obrazu na disku RAM (pamgovém) uloženého v zadaném souboru SDI (System Disk Image).
/SOS
Systém Windows bude vypisovat ovladade zaízení oznadené k zavádgní bghem spouštgní systému a následng zobrazí díslo verze systému (vdetng dísla sestavení), množství fyzické pamgti a podet procesor.
Kvalifikátor spouštgní
Význam
/TIMERES=
Nastavuje rozlišení systémového dasovade ve standardní víceprocesorové vrstvg HAL architektury x86 (Halmps.dll). Argumentem je díslo interpretované jako stovky nanosekund, skutedná rychlost se ale nastaví na nejbližší rozlišení podporované vrstvou HAL, které není vyšší než to požadované. Vrstva HAL podporuje následující rozlišení: Stovky nanosekund
Milisekundy (ms)
97660,98
195322,00
390633,90
781257,80
Výchozím rozlišením je 7,8 ms. Rozlišení systémového dasovade ovlivyuje rozlišení dasovad urdeného k dekání na urditou událost. Píklad: /TIMERES=21000 nastaví dasovad na rozlišení 2,0 ms. /USERVA=
Tento pepínad je podporován pouze na Windows XP a Windows Server 2003. Podobng jako pepínad /3GB nabízí tento pepínad aplikacím vgtší adresový prostor. Zadejte množství v MB mezi 2048 a 3072. Tento pepínad klade na aplikace stejné požadavky jako pepínad /3GB a vyžaduje také pítomnost pepínade /3GB (platí pouze pro 32bitové systémy).
/WIN95
Pikazuje zavadgdi Ntldr spustit sektor Consumer Windows uložený v souboru Bootsect.w40. Tento pepínad je využitelný pouze na systému s trojím spouštgním, na ngmž jsou instalované systémy MS-DOS, Consumer Windows a Windows. Další informace najdete v dlánku databáze Microsoft Knowledge Base díslo Q157992.
/WIN95DOS
Naizuje zavadgdi Ntldr spustit sektor Consumer Windows uložený v souboru Bootsect.w40. Tento pepínad je využitelný pouze na systému s trojím spouštgním, na ngmž jsou instalované systémy MS-DOS, Consumer Windows a Windows. Další informace najdete v dlánku databáze Microsoft Knowledge Base díslo Q157992.
/YEAR=
Híká základní dasové funkci systému Windows, že má ignorovat rok hlášený hodinami reálného dasu a použít místo ngj ten zde zadaný. To znamená, že rok stanovený v tomto pepínadi ovlivní veškerý software na systému, a to vdetng jádra Windows. Píklad: /YEAR=2001. (Tento pepínad byl vytvoen proto, aby pomáhal v testování Y2K, tedy problému pechodu do roku 2000.)
Nevybere-li uživatel žádnou položku ze spouštµcí nabídky v ur²itém ²ase zadaném v souboru Boot.ini, zavadµ² Ntldr zvolí výchozí možnost, kterou je první položka v souboru boot.ini s cestou odpovídající cestµ zadané na ½ádku „default=“. Jakmile je zadána volba spouštµní, Ntldr zavede a vykoná Ntdetect.com, což je 16bitový program pracující v reálném režimu, který se s využitím BIOSu systému dotazuje po²íta²e na základní informace o za½ízení a konfiguraci. Mezi tyto údaje spadají následující: Údaje o ²asu a datu uložené v pamµti CMOS (stálé) systému.
281
Spoušt?ní a vypínání
Proces spouštgní
282
Kapitola 5 – Spouštgní a vypínání
Typy sbµrnic (kup½íkladu ISA, PCI, EISA, Micro Channel Architecture [MCA]) na systému a identifikátory jednotlivých za½ízení p½ipojených k tµmto sbµrnicím. Po²et, velikost a typ diskových jednotek v systému. Typy vstupních za½ízení p½ipojených k systému. Po²et a typ paralelních port¾ konfigurovaných na systému. Typy grafických adaptér¾ v systému. Tyto údaje se p½evezmou do interních struktur a pozdµji v rámci spouštµní se uloží do klí²e registru HKLM\HARDWARE\DESCRIPTION. Na systému Windows 2000 zavadµ² Ntldr dále vymaže obrazovku a ukáže lištu postupu Starting Windows (Spouštµní Windows). Tato lišta z¾stane prázdná, dokud neza²ne Ntldr zavádµt základní ovlada²e. (Viz krok 5 v následujícím seznamu.) Pod lištou postupu je zpráva „For troubleshooting and advanced startup options for Windows, press F8“ (£ešení potíží nebo up½esnµní možností spuštµní – stisknµte klávesu F8). Stiskne-li uživatel klávesu F8, nabídne mu systém rozší½enou nabídku spuštµní, jež mu umožní vybrat volby jako spuštµní poslední známé funk²ní konfigurace, p½echod do nouzového režimu, režimu ladµní atd. Na Windows XP a Windows Server 2003 zobrazí zavadµ² Ntldr obrazovku loga nahrazující lištu postupu. Jestliže Ntldr bµží na systému x64 a jádro vybrané volbou p½íslušné položky z nabídky spuštµní je pro x64, p½epne Ntldr procesor do dlouhého režimu, v nµmž má slovo nativní délku 64 bit¾. Dále za²ne Ntldr zavádµt soubory ze spouštµcího svazku, které pot½ebuje ke spuštµní inicializace jádra. Spouštµcí svazek je ten, který odpovídá oddílu, na nµmž se nachází systémový adresá½ (vµtšinou \Windows) právµ spouštµné instalace. Kroky Ntldr zahrnují tyto: 1. Zavedení p½íslušných obraz¾ jádra a HAL (standardnµ Ntoskrnl.exe a Hal.dll). Pokud se Ntldr nepoda½í nµkterý z tµchto soubor¾ zavést, vytiskne zprávu „Windows could not start because the following file was missing or corrupt“ (systém Windows nemohl být spuštµn, protože následující soubor chybí nebo je poškozený) a dále pak název souboru. 2. Na²tení podregistru SYSTEM, \Windows\System32\Config\System, aby bylo možné stanovit ovlada²e za½ízení, které je v rámci startování zapot½ebí zavést. (Podregistr je soubor obsahující nµjaký podstrom registru. Více se o registru dozvíte v kapitole 4). 3. Skenování podregistru SYSTEM v pamµti a vyhledání všech ovlada²¾ za½ízení zavádµných p½i startování. To jsou ovlada²e nezbytné ke spuštµní systému a v registru jsou ozna²eny hodnotou spuštµní SERVICE_BOOT_START (0). Každý ovlada² za½ízení má pod HKLM\SYSTEM\CurrentControlSet\Services ur²itý podklí² registru. Kup½íkladu Services má podklí² nazvaný Dmio pro ovlada² správce logických disk¾ (Logical Disk Manager), jak jej vidíte na obrázku 5.2. (Podrobný popis položek Services registru najdete v oddílu „Služby“ v kapitole 4). 4. P½idání takového ovlada²e systému soubor¾, který zodpovídá za implementaci kódu pro typ oddílu (FAT, FAT32 nebo NTFS), na nµmž se nachází instala²ní adresá½, na seznam ovlada²¾ zavádµných p½i spouštµní. Ntldr musí tento ovlada² zavést již nyní; pokud by to neu²inil, jádro by po ovlada²ích vyžadovalo, aby se zavedly samy, což je požadavek vytvá½ející kruhovou závislost.
OBRÁZE K 5.2: Nastavení služby ovlada:e správce logických diskS
5. Zavedení ovlada²¾ p½i startování, což by mµly být pouze ty ovlada²e, které by podobnµ jako ovlada² systému soubor¾ vytvá½ely kruhové závislosti, kdyby bylo jejich zavedení požadováno po jádru. Ntldr aktualizuje lištu postupu zobrazenou pod textem Starting Windows (Spouštµní Windows), ²ímž indikuje postup zavádµní. Tato lišta se posunuje s každým zavedeným ovlada²em. (P½edpokládá se 80 ovlada²¾ zavádµných p½i startování – každé úspµšné zavedení posune lištu postupu o 1,25 %.) Je-li ve volbµ Boot.ini specifikován p½epína² /SOS, Ntldr nezobrazuje lištu postupu, ale názvy soubor¾ jednotlivých startovaných ovlada²¾. Pamatujte, že v tomto okamžiku se jednotlivé ovlada²e zavádµjí, ale neinicializují – k tomu dochází až pozdµji ve spouštµcí sekvenci. 6. P½íprava registr¾ CPU na vykonávání Ntoskrnl.exe. Tato akce ukon²uje roli zavadµ²e Ntldr v procesu spouštµní. Nyní Ntldr zavolá hlavní funkci v Ntoskrnl.exe, která zajistí zbytek inicializace systému.
Proces spouštgní na architektue IA64 Tabulka 5.3 uvádí soubory ú²astnící se procesu spouštµní na architektu½e IA64. Systémy IA64 odpovídají specifikaci Extensible Firmware Interface (EFI – rozhraní rozši½itelného firmwaru) definované spole²nosti Intel. Systém kompatibilní s EFI má firmware, jenž vykonává kód zavadµ²e spouštµní naprogramovaný do stálé pamµti RAM (NVRAM) systému instala²ním programem Windows. Tento spouštµcí kód na²ítá obsah také uložený v NVRAM, jenž na platformµ IA64 odpovídá obsahu souboru Boot.ini na systémech x86 a x64. Úpravu voleb spuštµní a p½epína²¾ v pamµti NVRAM umož¹ují jak nástroje EFI spole²nosti Microsoft vykonatelné v konzole EFI, tak i Bootcfg.exe, což je nástroj obsažený ve Windows. Dále dojde k detekci hardwaru, kdy zavadµ² spouštµní stanoví pomocí rozhraní EFI po²et a typ následujících za½ízení: SíÆové adaptéry, grafické adaptéry, klávesnice, ½adi²e disk¾, za½ízení úložišÆ.
283
Spoušt?ní a vypínání
Proces spouštgní
284
Kapitola 5 – Spouštgní a vypínání
Podobnµ jako Ntldr na systémech x86 a x64 následnµ zavadµ² zobrazí nabídku voleb spouštµní s volitelnou dobou vypršení. Jakmile je vybráno nµjaké spuštµní, zavadµ² p½ejde do toho adresá½e systémového oddílu EFI, který odpovídá výbµru, a zavádí nµkolik dalších soubor¾ nezbytných k pokra²ování ve startování: Fpswa.efi a Ia64ldr.efi. Specifikace EFI vyžaduje, aby mµl systém oddíl ur²ený jako systémový oddíl EFI, který je naformátován systémem soubor¾ FAT a má velikost mezi 100 MB a 1 GB nebo až jedno procento velikosti disku. Každá instalace Windows má podadresá½ na systémovém oddílu EFI pod EFI\Microsoft. První instalaci se p½i½adí složka Winnt50, druhé Winnt50.1 a každá následující instalace má jedine²né ²íslo indexu, jež je v názvu složky uvedeno za te²kou. Soubor Ia64ldr.efi zodpovídá za zavedení Ntoskrnl.exe, Hal.dll a ovlada²¾ pro spouštµní. Poté spouštµní pokra²uje stejnými kroky jako na architekturách x86 a x64. TABULKA 5.3: Komponenty procesu spouötÏnÌ na architektu¯e IA64 Komponenta
Umístgní
Fpswa.efi
EFI\Microsoft\Winnt50.x Soubor obsahující podporu operací
na systémovém oddílu EFI Ia64ldr.efi
Zodpovgdnost s pohyblivou desetinnou dárkou pro EFI
EFI\Microsoft\Winnt50.x Zavádí Ntoskrnl.exe, Hal.dll
na systémovém oddílu EFI
a ovladade pro spuštgní
Ntoskrnl.exe
\Windows\System32
Inicializuje subsystémy výkonné dásti a ovladade zaízení pro spouštgní a start systému, pipravuje systém na bgh nativních aplikací a vykonává SMSS.exe
Hal.dll
\Windows\System32
Knihovna DLL v režimu jádra zajišující pro Ntoksnrl a ovladade potebné rozhraní pístupu k hardwaru
Správce ízení služeb (Service Control Manager – SCM)
\Windows\System32
Zavádí a inicializuje ovladade zaízení automatického zavádgní a služby Windows
SMSS
\Windows\System32
Zavádí subsystém Windows vdetng Win32k.sys a Csrss.exe a spouští proces Winlogon
Winlogon
\Windows\System32
Spouští správce ízení služeb (SCM), subsystém místního úadu zabezpedení (Local Security Authority Subsystem – LSASS) a nabídne dialogové okno interaktivního pihlášení
Inicializace jádra a subsystém výkonné dásti Když Ntldr volá Ntoskrnl, p½edává datovou strukturu obsahující kopii toho ½ádku v souboru Boot.ini, jenž p½edstavuje vybranou položku nabídky odpovídající danému spouštµní, ukazatel na pamµÆové tabulky, které vygeneroval zavadµ² Ntldr k popisu fyzické pamµti v systému, ukazatel na pamµÆovou kopii podregistr¾ HARDWARE a SYSTEM a ukazatel na seznam ovlada²¾ pro spouštµní, které Ntldr zavedl.
Proces spouštgní
285
Ntoskrnl následnµ za²íná první fázi ze svého dvoufázového inicializa²ního procesu, ozna²ované za fáze 0 a fáze 1. Vµtšina subsystém¾ výkonné ²ásti má nµjakou inicializa²ní funkci p½ebírající parametr identifikující právµ probíhající fázi.
Funkce ExpInitializeExecutive za²íná voláním funkce HalInitSystem vrstvy HAL, jež umožní HAL získat ½ízení systému, než Windows vykonají významnou další inicializaci. Jednou ze zodpovµdností HalInitSystem je p½ipravit systémový ½adi² p½erušení jednotlivých procesor¾ na p½erušení a nakonfigurovat p½erušení intervalového ²asova²e, jež se používá k ú²tování ²asu procesor¾. (Více se o ú²tování ²asu CPU dozvíte v oddílu „Ú²tování kvant“ v kapitole 6.) Pouze na spouštµcím procesoru vykoná funkce ExpInitializeExecutive ještµ jinou inicializaci než volání HalInitSystem. Když HalInitSystem vrátí ½ízení, funkce ExpInitializeExecutive na spouštµcím procesoru pokra²uje zpracováním p½epína²e /BURNMEMORY v souboru Boot.ini (pokud se tedy nachází na tom ½ádku souboru Boot.ini, který odpovídá volbµ položky nabídky, jak ji zadal uživatel p½i volbµ spouštµné instalace) a vypustí množství pamµti zadané tímto p½íznakem. Následnµ funkce ExpInitializeExecutive zavolá fázi 0 inicializa²ních rutin správce pamµti, správce objekt¾, monitoru bezpe²nostních referencí, správce proces¾ a správce Plug and Play. Tyto komponenty vykonají následující inicializa²ní kroky: 1. Správce pamµti zkonstruuje tabulky stránek a interní datové struktury pot½ebné k zajišÆování základních pamµÆových služeb. Správce pamµti také sestaví a rezervuje ur²itou oblast pro systémovou mezipamµÆ soubor¾ a vytvo½í pamµÆové oblasti pro stránkovaný a nestránkovaný fond. Ostatní subsystémy výkonné ²ásti, jádro a ovlada²e za½ízení využívají tyto dva pamµÆové fondy k alokování svých datových struktur. 2. Bµhem inicializace správce objekt¾ se definují objekty nezbytné pro konstrukci oboru názv¾ správce objekt¾, aby do nµj mohly své objekty vkládat ostatní subsystémy. Vytvo½í se také tabulka manipulátor¾, aby se mohlo za²ít se sledováním objekt¾. 3. Monitor bezpe²nostních referencí inicializuje objekt typu tokenu a ten pak použije k vytvo½ení a p½ípravµ prvního tokenu ú²tu lokálního systému pro p½i½azení prvotnímu procesu. (Popis lokálního systémového ú²tu najdete v kapitole 8.) 4. Správce proces¾ zajistí vµtšinu své inicializace ve fázi 0, kdy definuje typy objekt¾ procesu a vlákna a vytvá½í seznam pro sledování aktivních proces¾ a vláken. Správce proces¾ rovnµž vytvá½í objekt procesu pro prvotní proces a nazývá jej Idle. Jako sv¾j poslední krok vytvá½í správce proces¾ proces System a systémové vlákno k vykonání rutiny Phase1Initialization. Toto vlákno ale neza²ne bµžet ihned, protože p½erušení jsou stále zakázána.
Spoušt?ní a vypínání
Bµhem fáze 0 jsou zakázána p½erušení. Smyslem této fáze je vybudovat základní struktury nezbytné pro volání služeb pot½ebných ve fázi 1. Hlavní funkce Ntoskrnl volá KiSystemStartup, která zase volá HalInitializeProcessor a KiInitializeKernel u jednotlivých CPU. Funkce KiInitializeKernel, pokud bµží na spouštµcím procesoru, zajistí celosystémovou inicializaci jádra, jako je inicializace r¾zných datových struktur sdílených všemi procesory. Každá instance KiInitializeKernel pak volá funkci zodpovµdnou za ½ízení fáze 0, ExpInitializeExecutive.
286
Kapitola 5 – Spouštgní a vypínání
5. Dojde k fázi 0 inicializace správce Plug and Play, která zahrnuje prostou inicializaci ur²itého prost½edku výkonné ²ásti používané k synchronizaci prost½edk¾ sbµrnic. Když se ½ízení vrátí funkci KiInitializeKernel na jednotlivých procesorech, pokra²uje ½ízení do cyklu Idle (ne²inného), který pak zp¾sobí, že systémové vlákno vytvo½ené v kroku 4 popisu p½edchozího procesu za²ne vykonávat fázi 1. (Druhotné procesory ²ekají s prací na své inicializaci až do kroku 5 fáze 1, jak ji vysvµtluje následující seznam.) Fáze 1 se skládá z dále uvedených krok¾. Úvodní obrazovka na systémech Windows 2000 zahrnuje lištu postupu a kroky, p½i nichž se zobrazení lišty aktualizuje, jsou zahrnuty v tomto seznamu: 1. Zavolá se funkce HalInitSystem, aby p½ipravila systém na p½íjem p½erušení od za½ízení a povolila p½erušení. 2. Zavolá se ovlada² videa pro zavádµní (\Windows\System32\Bootvid.dll), který zase zobrazí spouštµcí obrazovku Windows. (Na systémech Windows XP a Windows Server 2003 nabídne tento ovlada² stejnou grafiku, jakou již d½íve umístil na obrazovku zavadµ² Ntldr.) 3. Zavolá se inicializace správce napájení. 4. Inicializuje se systémový ²as (voláním HalQueryRealTimeClock) a pak se uloží jako ²as spuštµní systému. 5. Na víceprocesorovém systému se inicializují zbývající procesory a za²nou svá vykonávání. 6. Lišta postupu se nastaví na 5 procent. 7. Správce objekt¾ vytvo½í ko½enový adresá½ oboru názv¾ (\), adresá½ \ObjectTypes a adresá½ mapování (p½ipojení) názv¾ za½ízení systému DOS (\?? na Windows 2000 a \Global?? na Windows XP a Windows Server 2003). Pak vytvo½í symbolický odkaz \DosDevices ukazující na adresá½ mapování názv¾ za½ízení pro systém DOS. 8. Zavolá se výkonná ²ást, aby vytvo½ila své typy objekt¾ v²etnµ semaforu, mutexu, události a ²asova²e. 9. Jádro inicializuje datové struktury plánova²e (odesílatele) a tabulku odesílání systémových služeb. 10. Monitor bezpe²nostních referencí vytvo½í v oboru názv¾ správce objekt¾ adresá½ \Security a inicializuje auditovací datové struktury, je-li auditování zapnuté. 11. Lišta postupu se nastaví na 10 procent. 12. Zavolá se správce pamµti, aby vytvo½il objekt sekce a svá systémová pracovní vlákna (která si vysvµtlíme v kapitole 7). 13. Do systémového prostoru se p½ipojí tabulky podpory národních jazyk¾ (National Language Support – NLS). 14. Do systémového adresového prostoru se p½ipojí (mapuje) Ntdll.dll. 15. Správce mezipamµti (cache) inicializuje datové struktury mezipamµti souborového systému a vytvo½í svá pracovní vlákna. 16. Správce konfigurace vytvo½í objekt klí²e \Registry v oboru názv¾ správce objekt¾ a zkopíruje po²áte²ní data registru p½edaná zavadµ²em Ntldr do podregistr¾ HARDWARE a SYSTEM.
Proces spouštgní
287
17. Inicializují se globální datové struktury ovlada²e systému soubor¾. 18. Správce Plug and Play zavolá prvek Plug and Play systému BIOS. 19. Lišta postupu se nastaví na 20 procent.
22. Lišta postupu se nastaví na 25 procent. 23. Nyní dojde k inicializaci správce I/O (vstup¾ a výstup¾). Tato fáze spouštµní systému je komplexní a p½edstavuje 50 % „postupu“, jak jej hlásí informa²ní lišta. Správce I/O považuje každé úspµšné zavedení ovlada²e za další 2 procenta postupu spouštµní. (Pokud se zavádí více než 25 ovlada²¾, tak se lišta postupu zastaví na 75 %.) Správce I/O nejprve inicializuje r¾zné interní struktury a vytvo½í typy objekt¾ ovlada²e a za½ízení. Pak zavolá správce Plug and Play, správce napájení a vrstvu HAL, kde za²nou r¾zné fáze dynamického zjišÆování za½ízení a inicializace. (Protože tento proces je složitý a specifický pro konkrétní systém I/O, podrobnosti si necháme až na kapitolu 9.) Následnµ je inicializován subsystém Windows Management Instrumentation (WMI), který zajišÆuje ovlada²¾m za½ízení podporu WMI. (Další informace najdete v oddílu „Windows Management Instrumentation“ v kapitole 4.) Pak se zavolají všechny startovací ovlada²e, aby si zajistily své specifické inicializace, a zavedou se a inicializují ovlada²e za½ízení pro spouštµní systému. (Podrobnosti o zpracování informací o ½ízení zavádµní ovlada²¾ jsou také popsány v kapitole 9.) Nakonec se v oboru názv¾ správce objekt¾ vytvo½í názvy za½ízení systému MS-DOS jako symbolické odkazy. 24. Lišta postupu se nastaví na 75 procent. 25. Spouští-li se po²íta² v bezpe²ném režimu, zaznamená se tento fakt do registru. 26. Není-li v registru specificky zakázáno, aktivuje se stránkování kódu v režimu jádra (v Ntoskrnl a ovlada²ích). 27. Lišta postupu se nastaví na 80 procent. 28. Zavolá se správce napájení, aby inicializoval r¾zné struktury správy napájení. 29. Lišta postupu se nastaví na 85 procent. 30. Zavolá se monitor bezpe²nostních referencí, aby mohl vytvo½it vlákno p½íkazového serveru (Command Server Thread) komunikující s LSASS. (Více se o tom, jak je v systému Windows vynucováno zabezpe²ení, dozvíte v oddílu „Komponenty systému zabezpe²ení“ v kapitole 8.) 31. Lišta postupu se nastaví na 90 procent. 32. Posledním krokem je vytvo½ení procesu subsystému správce relací (Session Manager Subsystem – SMSS), jak byl popsán v kapitole 2. SMSS zodpovídá za vytvo½ení prost½edí pro uživatelský režim poskytující systému Windows viditelné rozhraní a kroky jeho inicializace si p½iblížíme v dalším oddílu. 33. Lišta postupu se nastaví (kone²nµ) na 100 %. Jako poslední krok p½edtím, než je inicializace výkonné ²ásti a jádra považována za dokon²enou, ²eká vlákno fáze 1 inicializace na manipulátor procesu správce relací
Spoušt?ní a vypínání
20. Subsystém LPC (lokálního volání procedur) inicializuje objekt typu portu LPC. 21. Pokud byl systém spuštµn s protokolováním (/BOOTLOG), inicializuje se protokolovací soubor spouštµní.
288
Kapitola 5 – Spouštgní a vypínání
s dobou vypršení 5 sekund. Dojde-li k ukon²ení procesu správce relací p½ed uplynutím 5 sekund, systém se zhroutí s ½ídicím kódem chyby SESSION5_INITIALIZATION_ FAILED. Uplyne-li pµtisekundové ²ekání, p½edpokládá se úspµšné spuštµní správce relací a funkce fáze 1 inicializace zavolá funkci vlákna stránky nula (vysvµtlenou v kapitole 7) správce pamµti. Toto systémové vlákno se tak stane vláknem stránky nula po zbytek bµhu systému.
SMSS, CSRSS a Winlogon SMSS je jako každý jiný proces v uživatelském režimu, až na dvµ výjimky: Zaprvé, Windows považují SMSS za d¾vµryhodnou sou²ást opera²ního systému. Zadruhé, SMSS je nativní aplikace. Jelikož se jedná o d¾vµryhodnou sou²ást opera²ního systému, m¾že SMSS vykonávat i akce, k jakým má oprávnµní jen nµkolik málo dalších
proces¾, jako nap½íklad vytvá½et tokeny zabezpe²ení. Jelikož je to nativní aplikace, SMSS nepoužívá rozhraní API systému Windows – využívá jen základní rozhraní API výkonné ²ásti spole²nµ ozna²ované za nativní API Windows. SMSS nevyužívá rozhraní API Windows, protože v okamžiku spuštµní SMSS ještµ není vykonáván subsystém Windows. Ve skute²nosti je jednou z prvních úloh SMSS právµ spustit subsystém Windows. SMSS pak zavolá subsystém výkonné ²ásti správce konfigurace, aby mohl dokon²it inicializaci registru, který bude obsahovat všechny své klí²e. Správce konfigurace je naprogramován tak, že ví, kde na disku jsou základní podregistry uloženy (s výjimkou podregistr¾ odpovídajících uživatelským profil¾m). Cesty k zavádµným podregistr¾m zaznamenává do klí²e HKLM\SYSTEM\CurrentControlSet\Control\hivelist.
Hlavní vlákno SMSS vykoná následující kroky inicializace: 1. Vytvo½í objekt portu volání LPC (\SmApiPort) a dvµ vlákna ²ekající na klientské požadavky (jako je zavedení nového subsystému nebo vytvo½ení relace). 2. Definuje symbolické odkazy pro názvy za½ízení v systému MS-DOS (nap½. COM1 a LPT1). 3. Jsou-li instalovány terminálové služby, vytvo½í v oboru názv¾ správce objekt¾ podadresá½ \Sessions (pro nµkolik relací). 4. Spustí jakýkoli program definovaný v HKLM\SYSTEM\CurrentControlSet\Control\ Session Manager\BootExecute. Tato hodnota obvykle obsahuje jeden p½íkaz ke spuštµní Autochk (verze Chkdsk pro okamžik spouštµní). 5. Vykoná operace zpoždµného p½ejmenování a odstranµní soubor¾, jak je na½izují klí²e HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations a HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\ PendingFileRenameOperations2. 6. Otev½e známé knihovny DLL a vytvo½í pro nµ objekty sekcí v adresá½i \Knowndlls oboru názv¾ správce objekt¾. Seznam knihoven DLL považovaných za známé se nachází v klí²i HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ Control\Session Manager\KnownDLLs a cesta k adresá½i, v nµmž se tyto knihovny DLL nacházejí, je uložena v hodnotµ Dlldirectory uvedeného klí²e. Informace
o tom, jak se sekce známých knihoven DLL používají bµhem zavádµní knihoven DLL, najdete v kapitole 6. 7. Vytvo½í dodate²né stránkovací soubory. Konfigurace stránkovacího souboru je uložena pod klí²em HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ Session Manager\Memory Management\PagingFiles. 8. Inicializuje registr. Správce konfigurace sestaví registr zavedením podregistr¾ HKLM\SAM, HKLM\SECURITY a HKLM\SOFTWARE. I když jsou soubory podregistr¾ na disku uvedeny v HKLM\SYSTEM\CurrentControlSet\Control\hivelist, správce konfigurace je vytvo½en tak, aby je hledal v \Windows\System32\Config. 9. Vytvo½í systémové promµnné prost½edí, jak jsou definovány v HKLM\System\ CurrentControlSet\Session Manager\Environment. 10. Zavede tu ²ást subsystému Windows (Win32k.sys), která pracuje v režimu jádra. SMSS stanoví umístµní Win32k.sys a dalších zavádµných komponent zjištµním jejich cest z HKLM\SYSTEM\CurrentControlSet\Control\Session Manager. Inicializa²ní kód ve Win32k.sys používá k p½epnutí obrazovky na rozlišení definované výchozím profilem ovlada²e videa, takže právµ v tomto okamžiku p½ejde displej z režimu VGA využívaného ovlada²em videa pro spouštµní do výchozího rozlišení navoleného na systému. 11. Spustí procesy subsystému v²etnµ Csrss. (Jak bylo uvedeno v kapitole 2, na Windows 2000 se subsystémy POSIX a OS/2 spouštµjí až na explicitní vyžádání.) 12. Spustí p½ihlašovací proces (Winlogon). Kroky spuštµní Winlogon si popíšeme dále. 13. Vytvo½í porty LPC pro zprávy událostí ladµní (DbgSsApiPort a DbgUiApiPort) a vlákna naslouchající na tµchto portech.
Pozdržené operace pejmenování soubor SkuteËnost, ûe jsou spustitelnÈ obrazy a knihovny DLL p¯i svÈm pouûitÌ mapov·ny do pamÏti, umoûÚuje aktualizovat z·kladnÌ systÈmovÈ soubory, jakmile se dokonËÌ spouötÏnÌ systÈmu Windows. RozhranÌ API MoveFileEx systÈmu Windows umoûÚuje specifikovat p¯esunutÌ souboru aû na okamûik n·sledujÌcÌho spouötÏnÌ. ServisnÌ balÌËky a opravy, kterÈ musÌ aktualizovat pouûÌvanÈ, do pamÏti mapovanÈ soubory, instalujÌ nahrazujÌcÌ soubory na doËasn· mÌsta systÈmu a pouûÌvajÌ API MoveFileEx k n·hradÏ jinak pouûÌvan˝ch soubor˘. P¯i pouûitÌ s p¯Ìsluönou volbou MoveFileEx prostÏ jen zaznamen· p¯Ìkazy do hodnot PendingFileRenameOperations a PendingFileRenameOperations2 pod HKLM\SYSTEM\CurrentControlSet\ Control\Session Manager. Tyto hodnoty registru jsou typu MULTI_SZ a kaûd· operace je specifikov·na dvojicÌ n·zv˘ soubor˘: PrvnÌ n·zev souboru je zdrojov˝m mÌstem a druh˝ pak cÌlov˝m umÌstÏnÌm. Operace odstranÏnÌ pouûÌvajÌ jako cÌlovou cestu pr·zdn˝ ¯etÏzec. K zobrazenÌ zaregistrovan˝ch zpoûdÏn˝ch p¯Ìkaz˘ p¯ejmenov·nÌ a odstranÏnÌ m˘ûete vyuûÌt utilitu Pendmoves ze sÌdla www.sysinternals.com.
Po provedení tµchto inicializa²ních krok¾ ²eká hlavní vlákno v SMSS donekone²na na manipulátory proces¾ CSRSS a Winlogon. Dojde-li k neo²ekávanému ukon²ení jednoho z tµchto proces¾, SMSS zp¾sobí zhroucení systému, protože Windows bez nich nemohou fungovat. (Pokud ve Windows XP a novµjších systémech z nµjakého d¾vodu selže CSRSS, zp¾sobí zhroucení systému jádro a nikoli SMSS.) Winlogon následnµ zajistí své spouštµcí kroky, jako je vytvo½ení po²áte²ních objekt¾ stanice oken a pracovní plochy. Je-li v HKLM\Software\Microsoft\Windows NT\Current
289
Spoušt?ní a vypínání
Proces spouštgní
290
Kapitola 5 – Spouštgní a vypínání
Version\WinLogon\GinaDLL zadána nµjaká knihovna DLL, Winlogon použije tuto
knihovnu jako GINA; jinak využije výchozí knihovnu GINA spole²nosti Microsoft, tedy Msgina (\Windows\System32\Msgina.dll), jež zobrazuje standardní p½ihlašovací dialogové okno Windows. Winlogon pak vytvo½í proces správce ½ízení služeb (Service Control Manager – SCM –\Windows\System32\Services.exe), jenž zavede všechny služby a za½ízení ozna²ená k automatickému spuštµní, a proces subsystému lokálního ovµ½ování zabezpe²ení (Local Security Authentication Subsystem – LSASS – \Windows\System32\LSASS.exe). (Další detaily o spouštµcí sekvenci sou²ástí Winlogon a LSASS najdete v oddílu „Inicializace Winlogon“ v kapitole 8.) Jakmile správce SCM inicializuje automaticky spouštµné služby a ovlada²e a dojde k úspµšnému p½ihlášení uživatele ke konzole, považuje SCM spuštµní za úspµšné. Poslední známá funk²ní konfigurace registru (jak ji indikuje HKLM\SYSTEM\Select\ LastKnownGood) se aktualizuje, aby odpovídala \CurrentControlSet. Pozn·mka Jelikoû na neinteraktivnÌch serverech nemusÌ nikdy dojÌt k interaktivnÌmu p¯ihl·öenÌ, nemusÌ se aktualizovat jejich konfigurace LastKnownGood tak, aby odr·ûela ¯ÌdicÌ mnoûinu pouûitou p¯i ˙spÏönÈm spuötÏnÌ. Definici ˙spÏönÈho spuötÏnÌ m˘ûete p¯ekr˝t nastavenÌm HKLM\Software\Microsoft\ Windows NT\CurrentVersion\Winlogon\ReportBootOk na hodnotu 0, naps·nÌm vlastnÌho programu ovϯenÌ spuötÏnÌ, kter˝ vol· API NotifyBootConfigStatus systÈmu Windows, jakmile je spuötÏnÌ ˙spÏönÈ, a zad·nÌm cesty k tomuto ovϯovacÌmu programu do HKLM\ System\CurrentControlSet\Control\BootVerificationProgram.
Po spuštµní SCM ²eká Winlogon na upozornµní na interaktivní p½ihlášení od GINA. Když toto p½ihlášení obdrží a ovµ½í je (což je proces, s nímž se blíže seznámíme v oddílu „Kroky p½ihlašování uživatel¾“ v kapitole 8), zavede Winlogon podregistr z profilu p½ihlašovaného uživatele a p½ipojí jej k HKCU. Pak nastaví uživatelské promµnné prost½edí uložené v HKCU\Environment a upozorní balí²ky Winlogon zaregistrované v HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify, že došlo k p½ihlášení. Winlogon následnµ ½ekne GINA, že má spustit systémové prost½edí. V reakci na tento požadavek spustí Msgina vykonatelný soubor nebo soubory specifikované v HKLM\ Software\Microsoft\WindowsNT\CurrentVersion\WinLogon\Userinit (p½i²emž více
vykonatelných soubor¾ se vzájemnµ oddµluje ²árkami). Tato hodnota ve výchozím stavu ukazuje na \Windows\System32\Userinit.exe. Userinit.exe zajistí toto: 1. Zpracuje uživatelské skripty zadané v HKCU\Software\Policies\Microsoft\ Windows\System\Scripts a skripty p½ihlašování k po²íta²i v HKLM\Software\ Policies\Microsoft\Windows\System\Scripts. (Jelikož se skripty po²íta²e spouštµjí až po uživatelských skriptech, mohou p½ekrýt uživatelská nastavení.) 2. Specifikují-li zásady skupiny nµjakou kvótu uživatelského profilu, spustí \Windows\ System32\Proquota.exe, ²ímž bude vynucována kvóta pro aktuálního uživatele. 3. Spustí prost½edí (pokud je jich více, pak jsou oddµlená ²árkami) specifikované v HKCU\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell. Pokud tato hodnota neexistuje, spustí Userinit.exe prost½edí (nebo více prost½edí) zadané v HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell , kterým je standardnµ Explorer.exe.
Proces spouštgní
291
Spoušt?ní a vypínání
Winlogon pak upozorní registrované poskytovatele sítµ, že došlo k p½ihlášení uživatele. Poskytovatel sítí Microsoft neboli Multiple Provider Router (\Windows\System32\ Mpr.dll) obnoví trvalé p½i½azení písmen jednotek a tiskáren daného uživatele, jak je uloženo v HKCU\Network resp. HKCU\Printers. Obrázek 5.3 zachycuje strom proces¾, jak jej zaznamenává Process Explorer bµhem p½ihlašování p½ed ukon²ením Userinit.
OBRÁZE K 5.3: Strom procesS b?hem pdihlašování
Automaticky spouštgné obrazy Kromµ hodnot registru Userinit a Shell v klí²i sou²ásti Winlogon je ještµ mnoho dalších míst a adresá½¾ registru, která výchozí komponenty systému kontrolují a zpracovávají p½i zjišÆování automaticky zavádµných proces¾ bµhem procesu spouštµní a p½ihlašování. Utilita Msconfig (obsažená ve Windows XP a Windows Server 2003 v adresá½i \Windows\System32\Msconfig.exe) ukazuje nakonfigurované obrazy v nµkolika místech. Nástroj Autoruns sídla Sysinternals, který si m¾žete stáhnout z www.sysinternals.com a který je uveden na obrázku 5.4, zkoumá více míst než Msconfig a zobrazuje více údaj¾ o obrazech nastavených na automatický bµh. Autoruns standardnµ zobrazuje pouze ta místa, kde je nastaveno automatické vykonání alespo¹ jednoho obrazu, po zaškrtnutí položky Include Empty Locations v nabídce View však nástroj Autoruns zobrazuje všechna prozkoumávaná umístµní. Nabídka View obsahuje rovnµž volby zobrazování informací o dalších typech automaticky zavádµných obraz¾, jako jsou služby Windows a dopl¹ky Exploreru (Pr¾zkumníku).
EXPERIMENT: Nástroj Autoruns Mnoho uûivatel˘ v˘bec nevÌ, kolik program˘ se vykon·v· jako souË·st jejich p¯ihl·öenÌ. V˝robci origin·lnÌho vybavenÌ (OEM) Ëasto konfigurujÌ svÈ systÈmy pomocÌ doplÚkov˝ch utilit, jeû se vykon·vajÌ na pozadÌ s vyuûitÌm hodnot registru nebo urËit˝ch adres·¯˘ systÈmu soubor˘, do nichû se ukl·dajÌ automaticky spouötÏnÈ poloûky, kterÈ nejsou norm·lnÏ viditelnÈ. Vöechny programy nakonfigurovanÈ na automatickÈ spouötÏnÌ na poËÌtaËi si zobrazÌte n·strojem Autoruns ze sÌdla www.sysinternals.com . Porovnejte si seznam zobrazen˝ utilitou Autoruns s tÌm, co ukazuje Msconfig (tento n·stroj je k dispozici na systÈmech Windows XP
292
Kapitola 5 – Spouštgní a vypínání
a Windows Server 2003), a vysledujte rozdÌly. N·slednÏ se p¯esvÏdËte, ûe rozumÌte ˙Ëelu kaûdÈho z tÏchto program˘.
OBRÁZE K 5.4: Nástroj Autoruns ze sídla www.sysinternals.com
5.2 Hešení potíží se startem a spouštgním V tomto oddílu najdete p½ístupy k ½ešení potíží, jež se mohou vyskytnout bµhem procesu spouštµní Windows a jsou d¾sledkem poškození obsahu na pevném disku, poškození soubor¾, chybµjících soubor¾ a chyb v ovlada²ích nezávislých výrobc¾. Nejprve si popíšeme t½i režimy obnovení Windows p½i potížích se spuštµním: poslední známou funk²ní konfiguraci, nouzový režim a konzolu pro zotavení. Pak si ukážeme obvyklé problémy p½i spouštµní a p½ístupy k jejich ½ešení. Tyto p½ístupy využívají poslední známou funk²ní konfiguraci, nouzový režim, konzolu pro zotavení a další nástroje dodávané s Windows.
Poslední známá dobrá konfigurace Poslední známá funk²ní konfigurace (Last Known Good – LKG) je užite²ný mechanismus pro p½estavení systému, který se bµhem spouštµní hroutí, zpµt do spustitelného stavu. Protože se konfigura²ní nastavení systému ukládají do klí²e HKLM\System\ CurrentControlSet\Control a konfigurace ovlada²¾ a služeb do klí²e HKLM\System\ CurrentControlSet\Services, zmµny tµchto ²ástí registru mohou u²init systém nespustitelným. Když kup½íkladu nainstalujete nµjaký ovlada² za½ízení obsahující chybu, jež zp¾sobuje hroucení systému p½i startování, m¾žete bµhem p½íštího spouštµní stisknout klávesu F8 a ze zobrazené nabídky zvolit poslední známou funk²ní konfiguraci. Systém ozna²í ½ídicí množinu, kterou dosud používal ke spuštµní, za selhavší tím zp¾sobem, že nastaví hodnotu Failed klí²e HKLM\System\Select. Pak zmµní HKLM\ System\Select\Current na hodnotu uloženou v HKLM\System\Select\LastKnownGood. Rovnµž aktualizuje symbolický odkaz HKLM\System\CurrentControlSet, aby ukazoval na ½ídicí množinu LastKnownGood. Jelikož se v podklí²i Services ½ídicí množiny LastKnownGood klí² nového ovlada²e nevyskytuje, systém se úspµšnµ spustí.
Hešení potíží se startem a spouštgním
293
Stav nouze
P½i startování Windows stisknµte klávesu F8, ²ímž vstoupíte do speciální spouštµcí nabídky obsahující i volby spuštµní ve stavu nouze. Vµtšinou máte možnost vybrat si ze t½í variant: stav nouze, stav nouze s prací v síti a stav nouze se systémem MS-DOS, tedy s p½íkazovým ½ádkem. Standardní stav nouze zahrnuje minimální po²et ovlada²¾ za½ízení a služeb nezbytných k úspµšnému spuštµní. Stav nouze s prací v síti p½idává síÆové ovlada²e a služby k tµm, které zahrnuje standardní nouzový režim. Kone²nµ stav nouze se systémem MS-DOS odpovídá standardnímu nouzovému režimu, jenom Windows v okamžiku, kdy systém aktivuje režim GUI (grafický), spouštµjí jako prost½edí aplikaci p½íkazového ½ádku (Cmd.exe), a nikoli Windows Explorer. Systém Windows zahrnuje ještµ ²tvrtý nouzový režim – režim obnovení adresá½ové služby. Ten se liší od p½edchozích režim¾. Režim obnovení adresá½ové služby (Directory Services Restore) lze použít ke spuštµní systému v režimu, kdy je adresá½ová služba Active Directory ½adi²e domény offline (vypnutá) a její databáze neotev½ená. To vám umožní vykonávat opravné operace na dané databázi nebo ji obnovit ze záložního média. P½i spouštµní systému v režimu obnovení adresá½ové služby se zavádµjí všechny ovlada²e a za½ízení s výjimkou služby Active Directory. V p½ípadµ, že se nem¾žete p½ihlásit na systém kv¾li poškození databáze Active Directory, vám tento režim umožní narušení odstranit.
Zavádgní ovladad v bezpedném režimu Jak systém Windows ví, které ovlada²e za½ízení a služby jsou sou²ástí standardního a síÆového bezpe²ného režimu? OdpovµÅ se nachází v klí²i registru HKLM\SYSTEM\ CurrentControlSet\Control\SafeBoot. Ten obsahuje podklí²e Minimal a Network . Každý podklí² obsahuje další podklí²e specifikující názvy ovlada²¾ za½ízení nebo služeb ²i skupin ovlada²¾. Kup½íkladu podklí² vga.sys identifikuje ovlada² za½ízení displeje VGA, který je sou²ástí startovací konfigurace. Ovlada² za½ízení displeje VGA nabízí základní služby všech grafických adaptér¾ kompatibilních se standardem PC. Systém využívá tento ovlada² jako grafický ovlada² p½i nouzovém režimu místo jiného ovlada²e, který m¾že využívat pokro²ilé hardwarové prvky, ale zárove¹ zabra¹ovat systému ve spuštµní. Každý podklí² pod SafeBoot má ur²itou výchozí hodnotu popisující, co daný podklí² identifikuje; výchozí hodnotou podklí²e vga.sys je „Driver“. Podklí² Boot file system má jako výchozí hodnotu zadáno „Driver Group“. Když vývojá½i navrhují instala²ní skript ovlada²e za½ízení, mohou také specifikovat, že daný ovlada² pat½í do ur²ité skupiny ovlada²¾. Skupiny ovlada²¾ definované systé-
Spoušt?ní a vypínání
Z½ejmµ nej²astµjší p½í²inou nemožnosti spustit systém Windows je to, že nµjaký ovlada² za½ízení zap½í²i¹uje hroucení systému bµhem sekvence startování/spouštµní. Protože se konfigurace hardwaru a softwaru mohou ²asem mµnit, mohou se kdykoli projevit latentní chyby v ovlada²ích. Systém Windows nabízí správci možnost vy½ešit takové potíže pomocí spouštµní ve stavu nouze (safe mode). Stav nouze je princip, který si systém Windows vyp¾j²uje od Consumer Windows – jedná se o spouštµcí konfiguraci sestávající z minimální množiny ovlada²¾ za½ízení a služeb. Když využívá pouze ty ovlada²e a služby, které jsou ke spuštµní skute²nµ nezbytné, vyhýbá se systém Windows zavádµní ovlada²¾ t½etích výrobc¾ a jiných ned¾ležitých ovlada²¾, které mohou zp¾sobit zhroucení.
294
Kapitola 5 – Spouštgní a vypínání
mem jsou uvedeny v hodnotµ List klí²e HKLM\SYSTEM\CurrentControlSet\Control\ ServiceGroupOrder. Vývojá½ specifikuje ovlada² jako ²lena ur²ité skupiny proto, aby systému Windows ½ekl, v jakém okamžiku procesu spouštµní se má tento ovlada² zavést. Hlavním smyslem klí²e ServiceGroupOrder je definovat po½adí, v jakém se zavádµjí skupiny ovlada²¾; nµkteré typy ovlada²¾ se musejí zavádµt p½ed jinými typy ovlada²¾ nebo po nich. Hodnota Group pod klí²em registru konfigurace ovlada²e p½i½azuje daný ovlada² do nµjaké skupiny. Klí²e konfigurace ovlada²¾ a služeb se nacházejí pod HKLM\SYSTEM\CurrentControlSet\Services. Podíváte-li se do tohoto klí²e, najdete tu klí² VgaSave sloužící ovlada²i za½ízení displeje VGA, který je v registru uveden jako ²len skupiny Video Save. Všechny ovlada²e systému soubor¾, které systém Windows vyžaduje pro p½ístup k systémové jednotce Windows, se nacházejí ve skupinµ Boot file system. Má-li systémová jednotka formát NTFS, pak je sou²ástí této skupiny ovlada² NTFS. (Hodnotou Group pod klí²em Ntfs je Boot file system.) Jinak je sou²ástí této skupiny ovlada² systému soubor¾ Fastfat (jenž podporuje jednotky FAT12, FAT16 a FAT32 ve Windows). Ostatní ovlada²e systému soubor¾ jsou sou²ástí skupiny File system, kterou konfigurace standardního a síÆového nouzového režimu také zahrnují. Když spouštíte systém v konfiguraci nouzového režimu, p½edá startovací zavadµ² (Ntldr) p½idružený p½epína² jádru (Ntoskrnl.exe) jako parametr p½íkazového ½ádku spole²nµ s ostatními p½epína²i, které jste p½i½adili spouštµné instalaci v souboru Boot.ini. Spouštíte-li nµjaký nouzový režim, p½edává Ntldr p½epína² /SAFEBOOT:. Ntldr p½idává k /SAFEBOOT: jeden nebo více dopl¹kových ½etµzc¾ podle toho, jaký typ tohoto režimu zvolíte. V p½ípadµ standardního nouzového režimu dopl¹uje Ntldr ozna²ení MINIMAL a v p½ípadµ nouzového režimu s prací v síti používá NETWORK. Zavadµ² Ntldr p½idává MINIMAL(ALTERNATESHELL) u Stavu nouze se systémem MS-DOS a DSREPAIR u režimu obnovení adresá½ové služby. Jádro Windows skenuje spouštµcí parametry a hledá p½epína²e bezpe²ného režimu již velmi brzy v procesu spouštµní. Interní promµnnou InitSafeBootMode pak nastavuje na hodnotu odrážející p½epína²e, jež nalezne. Jádro zapisuje hodnotu InitSafeBootMode do hodnoty registru HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot\Option \OptionValue, takže komponenty uživatelského režimu, jako nap½. správce SCM, dokážou stanovit, v jakém režimu spouštµní se systém nachází. Navíc platí, že pokud se systém spouští ve Stavu nouze se systémem MS-DOS, jádro nastaví HKLM\SYSTEM\ CurrentControlSet\Control\SafeBoot\Option\UseAlternateShell na hodnotu 1. Jádro zaznamená parametry, které mu p½edal zavadµ² Ntldr, do hodnoty HKLM\SYSTEM\ CurrentControlSet\Control\SystemStartOptions. Když subsystém jádra správce I/O zavádí ovlada²e za½ízení specifikované klí²em HKLM\SYSTEM\CurrentControlSet\Services, vykonává správce I/O funkci IopLoadDriver. Jakmile správce Plug and Play detekuje nµjaké nové za½ízení a chce dynamicky zavést jeho ovlada², vykoná funkci IopCallDriverAddDevice. Obµ tyto funkce volají funkci IopSafeBootDriverLoad, než zavedou p½íslušný ovlada². IopSafeBootDriverLoad kontroluje hodnotu InitSafeBootMode a stanovuje, zda se má daný ovla-
da² zavést. Pokud je systém kup½íkladu spuštµn ve standardním nouzovém režimu, IopSafeBootDriverLoad si pod klí²em Minimal vyhledá skupinu daného ovlada²e, máli nµjakou. Najde-li tu IopSafeBootDriverLoad uvedenou skupinu, indikuje svému volajícímu, že se daný ovlada² m¾že zavést. Jinak IopSafeBootDriverLoad hledá název
Hešení potíží se startem a spouštgním
295
Existuje tu ur²itá výjimka související s ovlada²i, které nouzový režim ze spouštµní vylou²í: Ntldr, a nikoli jádro, zavede všechny ovlada²e s nulovou hodnotou Start v jejich klí²ích registru, což specifikuje zavádµní ovlada²¾ bµhem startování systému. Ntldr neprovµ½uje klí² registru SafeBoot, protože p½edpokládá, že jakýkoli ovlada² s nulovou hodnotou Start je nezbytný k úspµšnému spuštµní systému. Jelikož zavadµ² Ntldr neprovµ½uje klí² registru SafeBoot a nestanovuje, které ovlada²e se mají zavést, Ntldr zavede všechny ovlada²e pro spouštµní (a Ntoskrnl je pozdµji spustí).
Uživatelské programy s podporou nouzového režimu Když se bµhem procesu spouštµní inicializuje komponenta uživatelského režimu správce ½ízení služeb (SCM), kterou implementuje Services.exe, provµ½í SCM hodnotu HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot\Option\OptionValue a stanoví, zda se systém rozbíhá v nouzovém režimu. Pokud ano, zrcadlí SCM akce funkce IopSafeBootDriverLoad. P½estože SCM zpracovává všechny služby uvedené pod HKLM\SYSTEM\CurrentControlSet\Services, zavádí pouze ty, jejichž názvy p½íslušný podklí² nouzového režimu specifikuje. Více informací o procesu inicializace SCM najdete v oddílu „Služby“ v kapitole 4. Userinit (\Windows\System32\Userinit.exe) je další komponentou bµžící v uživatelském režimu, která musí vµdµt, zda se systém rozbíhá v nouzovém režimu. Userinit, což je komponenta inicializující prost½edí uživatele p½i jeho p½ihlašování, kontroluje HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot\Option\UseAlternateShell. Je-li tato hodnota zadána, spustí Userinit program specifikovaný v HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot\AlternateShell jako uživatelské prost½edí místo Explorer.exe. Windows bµhem instalace zapisují do hodnoty AlternateShell program Cmd.exe, takže výchozím prost½edím pro nouzový režim se systémem MS-DOS systému Windows se stává právµ p½íkazový ½ádek. Prost½edím je sice p½íkazový ½ádek, p½esto do nµj ale m¾žete zadat Explorer.exe a spustit si Pr¾zkumník Windows, stejnµ jako jakýkoli jiný grafický program. Jak aplikace zjišÆují, zda se systém spouští v nouzovém režimu? Voláním funkce GetSystemMetrics(SM_CLEANBOOT) systému Windows. Dávkové skripty, které musí
vykonat ur²ité operace v p½ípadµ, že se systém spouští v nouzovém režimu, hledají promµnnou prost½edí SAFEBOOT_OPTION, protože tu systém definuje pouze p½i svém spouštµní v nouzovém režimu.
Protokolování spouštgní v nouzovém režimu Když systém nasmµrujete na spouštµní v nouzovém režimu, p½edá zavadµ² Ntldr ½etµzec specifikovaný volbou /BOOTLOG jádru Windows jako parametr spole²nµ s parametrem požadujícím nouzový režim. P½i inicializaci jádro kontroluje existenci parametru protokolování spouštµní, aÆ už je parametr nouzového režimu použit nebo ne. Jestliže jádro odhalí ½etµzec protokolování spouštµní, za²ne zaznamenávat
Spoušt?ní a vypínání
daného ovlada²e pod klí²em Minimal. Je-li název ovlada²e uveden jako podklí², m¾že se daný ovlada² zavést. Nedokáže-li funkce IopSafeBootDriverLoad najít podklí²e skupiny ovlada²e ani názvu ovlada²e, nem¾že se daný ovlada² zavést. Pokud je systém spuštµn v nouzovém režimu s prací v síti, vykoná funkce IopSafeBootDriverLoad stejná hledání v podklí²i Network. Není-li systém spuštµn v nouzovém režimu, IopSafeBootDriverLoad umožní ovlada²i zavedení.
296
Kapitola 5 – Spouštgní a vypínání
své akce s každým ovlada²em za½ízení, jehož zavedení zvažuje. Když kup½íkladu funkce IopSafeBootDriverLoad ½ekne správci I/O, že ur²itý ovlada² nemá zavádµt, zavolá tento správce IopBootLog, aby byla tato skute²nost zaznamenána. Podobnµ platí, že po úspµšném zavedení ovlada²e, který je sou²ástí konfigurace nouzového režimu, funkcí IopLoadDriver, zavolá tato funkce IopBootLog a nechá zavedení daného ovlada²e zaznamenat. Na protokoly spouštµní se pak m¾žete podívat a zjistit, které ovlada²e za½ízení jsou sou²ástí konfigurace spouštµní. Protože se jádro chce vyhnout modifikacím disku, dokud neprobµhne Chkdsk, k ²emuž dochází až pozdµji v procesu spouštµní, nem¾že funkce IopBootLog prostµ zprávy zapisovat do nµjakého protokolového souboru. Místo toho zaznamenává IopBootLog zprávy do hodnoty registru HKLM\SYSTEM\CurrentControlSet\BootLog. Jako první komponenta bµžící v uživatelském režimu, která se bµhem spouštµní zavádí, vykoná správce relací (\Windows\System32\SMSS.exe) program Chkdsk kontrolující integritu systémových jednotek a následnµ dokon²í inicializaci registru provedením systémového volání NtInitializeRegistry. Jádro ²iní tuto akci jako náznak, že lze bezpe²nµ otev½ít protokolový soubor na disku, což také u²iní a zavolá funkci IopCopyBootLogRegistryToFile. Ta vytvo½í soubor Ntbtlog.txt v systémovém adresá½i Windows (standardnµ \Windows) a zkopíruje do nµj obsah hodnoty registru BootLog. Funkce IopCopyBootLogRegistryToFile rovnµž nastavuje pro IopBootLog p½íznak, který této funkci oznamuje, že nyní m¾že zapisovat p½ímo do protokolového souboru a nemusí již zaznamenávat zprávy do registru. Následující výstup zachycuje ²áste²ný obsah ukázkového protokolu spouštµní: Service Pack 1 3 30 2004 14:05:21.500 Loaded driver \WINDOWS\system32\ntoskrnl.exe Loaded driver \WINDOWS\system32\hal.dll Loaded driver \WINDOWS\system32\KDCOM.DLL Loaded driver \WINDOWS\system32\BOOTVID.dll Loaded driver ACPI.sys Loaded driver \WINDOWS\System32\DRIVERS\WMILIB.SYS Loaded driver pci.sys Loaded driver isapnp.sys Loaded driver intelide.sys Loaded driver \WINDOWS\System32\DRIVERS\PCIIDEX.SYS Loaded driver MountMgr.sys Loaded driver ftdisk.sys Loaded driver dmload.sys Loaded driver dmio.sys Microsoft (R) Windows 2000 (R) Version 5.0 (Build 2195) 2 11 2000 10:53:27.500 Loaded driver \WINNT\System32\ntoskrnl.exe Loaded driver \WINNT\System32\hal.dll Loaded driver \WINNT\System32\BOOTVID.DLL Loaded driver ACPI.sys Loaded driver \WINNT\System32\DRIVERS\WMILIB.SYS Loaded driver pci.sys Loaded driver isapnp.sys Loaded driver compbatt.sys Loaded driver \WINNT\System32\DRIVERS\BATTC.SYS Loaded driver intelide.sys
Loaded driver \WINNT\System32\DRIVERS\PCIIDEX.SYS Loaded driver pcmcia.sys Loaded driver ftdisk.sys Loaded driver Diskperf.sys Loaded driver dmload.sys Loaded driver dmio.sys § Did not load driver \SystemRoot\System32\Drivers\lbrtfdc.SYS Did not load driver \SystemRoot\System32\Drivers\Sfloppy.SYS Did not load driver \SystemRoot\System32\Drivers\i2omgmt.SYSDid not load driver Media Control Devices Did not load driver Communications Port Did not load driver Audio Codecs §
Konzola pro zotavení Stav nouze je uspokojivá možnost na systémech, které náhle nelze spustit kv¾li tomu, že bµhem spouštµcí sekvence dochází ke zhroucení nµjakého ovlada²e za½ízení. V ur²itých p½ípadech ale spuštµní v nouzovém režimu rozbµh systému nezajistí. Když je kup½íkladu onen ovlada², jenž zabra¹uje systému ve spuštµní, ²lenem skupiny Safe, tak selže i spouštµní v bezpe²ném režimu. Další situace, kdy nouzový režim nepom¾že se spuštµním systému, nastává, když spuštµní systému zabra¹uje nµjaký ovlada² jiného tv¾rce, nap½íklad antivirový program zavádµný p½i startování. (Startovací ovlada²e se zavádµjí bez ohledu na to, zda je systém v nouzovém režimu.) Další situace, kdy selže spouštµní v nouzovém režimu, nastávají, když se poškodí nµjaký systémový modul nebo soubor kritického ovlada²e za½ízení, který je sou²ástí konfigurace nouzového režimu, nebo je-li poškozen hlavní spouštµcí záznam (Master Boot Record – MBR) disku. Tyto potíže m¾žete vy½ešit pomocí konzoly pro zotavení (Recovery Console) systému Windows. Konzola pro zotavení vám umož¹uje spustit omezené prost½edí p½íkazového ½ádku z CD Windows nebo spouštµcích disk¾ a instalaci opravit, aniž byste ji museli využívat ke spuštµní systému. P½i spouštµní systému z CD Windows nebo spouštµcích disket nakonec uvidíte obrazovku nabízející vám buÅ instalaci Windows, nebo opravu existující instalace. Vyberete-li opravu instalace, systém vás vyzve k vložení CD Windows (není-li zatím v jednotce CD systému) a pak k výbµru jedné ze dvou možností opravy: spuštµní konzoly pro zotavení nebo inicializaci procesu opravy v nouzi. Stisknete-li na uvítací obrazovce instalace Windows klávesu F10, p½esko²íte možnosti nabídky a dostanete se p½ímo do konzoly pro zotavení. P½i spuštµní konzoly pro zotavení se vám nabídne k výbµru seznam instalací t½ídy Windows NT a Windows, který konzola vytvo½ila skenováním pevných disk¾ po²íta²e. Jakmile vyberete jeden systém, vyzve vás konzola k zadání hesla ú²tu Administrator, ²ímž se k instalaci p½ihlásíte jako správce. Po úspµšném p½ihlášení vás systém p½enese do p½íkazového ½ádku podobného prost½edí systému MS-DOS. P½íkazová množina je flexibilní a dovoluje vám provádµt jednoduché operace se soubory (jako je kopírování, p½ejmenování a odstranµní), aktivovat a deaktivovat služby a ovlada²e a dokonce i opravovat záznamy MBR a spouštµcí záznamy. Konzola pro zotavení vám neumožní p½ístup k jiným adresá½¾m než ko½enovým, k systémovému adresá½i instalace, k níž
297
Spoušt?ní a vypínání
Hešení potíží se startem a spouštgním
298
Kapitola 5 – Spouštgní a vypínání
jste p½ihlášeni, a k adresá½¾m na výmµnných jednotkách, jako jsou CD a diskety, pokud to tedy nastavení lokálních zásad zabezpe²ení, jak jsou uložena v podregistru SECURITY registru p½íslušné instalace, nezakazují. Tím je zajištµna ur²itá úrove¹ zabezpe²ení dat, k nimž nemusí mít administrátor obvykle p½ístup. Toto omezení m¾žete p½ekonat pomocí editoru zásad místního zabezpe²ení (Local Security Policy – secpol.msc), v nµmž lze konfigurovat nastavení konzoly pro zotavení ve složce Security Options místních zásad p½i normálnµ spuštµném systému. Konzola pro zotavení používá k vykonávání operací I/O podpory p½íkaz¾ jako Cd, Rename a Move nativní rozhraní systémových volání Windows. P½íkazy Enable a Disable, jež vám dovolují zmµnit režimy spouštµní ovlada²¾ za½ízení a služeb, však fungují jinak. Když kup½íkladu ½eknete konzole pro zotavení, že chcete zakázat nµjaký ovlada² za½ízení, „sáhne“ do klí²e Services dané instalace a upraví hodnotu Start klí²e specifikovaného ovlada²e, kterou zmµní na SERVICE_DISABLED. P½i dalším spouštµní této instalace se p½íslušný ovlada² za½ízení nezavede. (Konzola pro zotavení zavádí rovnµž podregistr SYSTEM [ \Windows\System32\Config\System] instalace, k níž se p½ihlašujete. Tento podregistr obsahuje informace uložené v klí²i registru HKLM\SYSTEM\CurrentControlSet\Services.) P½i spouštµní z CD Windows nebo spouštµcích disket máte v okamžiku, kdy vám systém nabídne možnost nainstalovat nebo obnovit Windows, již spuštµnou kopii jádra Windows v²etnµ všech pot½ebných podp¾rných ovlada²¾ za½ízení (kup½íkladu ovlada²e NTFS nebo FAT, ovlada²e SCSI, ovlada² grafiky). Na systémech x86 je spouštµní z CD ½ízeno souborem Txtsetup.sif v adresá½i I386 na CD systému Windows; tento soubor obsahuje direktivy identifikující soubory, které se mají zavést, a také jejich umístµní na CD. Podobnµ jako p½i spouštµní Windows z pevného disku je prvním programem uživatelského režimu, který jádro vykoná, správce relací (Session Manager – SMSS.exe) umístµný ve složce I386\System32. Správce relací používaný instala²ním programem Windows se liší od správce relací ve standardní instalaci. Ona první komponenta vám nabídne nabídky umož¹ující nainstalovat nebo opravit Windows a nabídku dotazující se na typ opravy, kterou chcete provést. Pokud systém Windows instalujete, právµ správce relací je tou komponentou, jež vás provádí volbou oddílu k instalaci a jež kopíruje soubory na pevný disk. Když spouštíte konzolu pro zotavení, nahraje se správce relací a spustí dva ovlada²e za½ízení, které konzolu pro zotavení implementují: Spcmdcon.sys a Setupdd.sys . Spcmdcon.sys nabízí interaktivní p½íkazový ½ádek a vykonává zpracování vysokoúrov¹ových p½íkaz¾. Setupdd.sys je podp¾rný ovlada², který nabízí Spcmdcon.sys sadu funkcí umož¹ujících spravovat diskové oddíly, zavádµt podregistry a zobrazovat a spravovat grafický výstup. Setupdd.sys také komunikuje s diskovými ovlada²i p½i správµ diskových oddíl¾ a využívá základní podporu grafiky, vestavµnou do jádra Windows, k zobrazování zpráv na monitoru. Jakmile zvolíte instalaci, k níž se chcete p½ihlásit, a konzola pro zotavení p½ijme vaše heslo, musí konzola váš pokus o p½ihlášení ovµ½it. To vše v situaci, kdy subsystém zabezpe²ení Windows dané instalace nebµží. Proto musí sama konzola pro zotavení stanovit, zda vaše heslo odpovídá ú²tu Administrator daného systému. Prvním krokem konzoly pro zotavení v tomto procesu je využití Setupdd.sys k zavedení podregistru správce ú²t¾ zabezpe²ení (Security Accounts Manager – SAM) dané instalace, který ukládá informace o heslech. Podregistr SAM se nachází
Hešení potíží se startem a spouštgním
299
v \Windows\System32\Config\Sam. Po zavedení tohoto podregistru z disku vyhledá konzola pro zotavení systémový klí² v registru dané instalace a použije jej k dešifrování pamµÆové kopie SAM. Šifrování podregistru správce SAM je prvek zavedený ve Windows NT 4 Service Pack 3, který dopl¹uje ochranu p½ed dosovými programy zjišÆování hesel, jež se snaží ²íst hesla p½ímo ze souboru podregistru.
Hešení obvyklých potíží se spouštgním Tento oddíl shrnuje potíže, jež se mohou projevit bµhem procesu spouštµní, popisuje jejich symptomy, p½í²iny a p½ístupy k jejich ½ešení. Abyste dokázali lépe najít problém, s nímž jste se setkali, jsou uspo½ádány podle místa, kde k nim p½i startování/spouštµní dochází.
Poškození záznamu MBR P¾íznaky Systém s poškozeným hlavním spouštµcím záznamem (Master Boot Record – MBR) vykoná samokontrolu po zapnutí (power-on self test – POST) systému BIOS, zobrazí informace o verzi BIOSu a zna²ce OEM, p½ejde zpµt na ²ernou obrazovku a pak se zastaví. V závislosti na typu poškození, jaké záznam MBR utrpµl, m¾žete spat½it jednu z následujících zpráv: „Invalid Partition Table“ (neplatná tabulka oddíl¾), „Error Loading Operating System“ (chyba p½i zavádµní opera²ního systému) nebo „Missing Operating System“ (chybµjící opera²ní systém). P¾í³ina Záznam MBR se m¾že poškodit díky chybám pevného disku, narušení disku v d¾sledku chyby nµjakého ovlada²e p½i bµhu Windows nebo úmyslným poškozením zp¾sobeným virem. ¤ešení SpusÆte konzolu pro zotavení (Recovery Console) a vykonejte p½íkaz fixmbr. Ten nahradí vykonatelný kód v MBR. Bohužel ale neopraví tabulku oddíl¾. Jedinou možností, jak obnovit poškozenou tabulku diskových oddíl¾, je použití záložní kopie nebo speciálního nástroje opravy poškození pevného disku.
Poškození spouštgcího sektoru P¾íznaky Poškození spouštµcího sektoru m¾že vypadat jako porušení záznamu MBR, protože systém se zablokuje na obrazovce POST systému BIOS. M¾žete také vidµt zprávy „A disk read error occurred“ (došlo k chybµ p½i ²tení z disku), „NTLDR is missing“ (chybí zavadµ² NTLRD) nebo „NTLDR is compressed“ (zavadµ² NTLDR je zkomprimován). P¾í³ina Spouštµcí sektor se m¾že poškodit díky chybám pevného disku, narušení disku v d¾sledku chyby nµjakého ovlada²e p½i bµhu Windows nebo úmyslným poškozením zp¾sobeným virem. ¤ešení SpusÆte konzolu pro zotavení a vykonejte p½íkaz fixboot. Ten p½epíše spouštµcí sektor jednotky, kterou zadáte. Uvedený p½íkaz byste mµli vykonat na systémové i spouštµcí jednotce, pokud jsou rozdílné.
Spoušt?ní a vypínání
Konzola pro zotavení (Spcmdcon.sys) následnµ vyhledá v SAM heslo ú²tu Administrator a v posledním kroku ovµ½ení použije konzola pro zotavení hešovací algoritmus MD5 – tentýž, jaký používá p½ihlašovací proces systému Windows – k hešování zadaného hesla a porovnání výsledného kódu s heslem uloženým správcem SAM. Zjistí-li konzola pro zotavení shodu, systém vás považuje za p½ihlášené. Pokud konzola pro zotavení shodu nepotvrdí, systém vám odmítne p½ístup ke konzole pro zotavení.
300
Kapitola 5 – Spouštgní a vypínání
Špatná konfigurace souboru Boot.ini P¾íznak Po testu POST systému BIOS uvidíte zprávu za²ínající „Windows could not start because of a computer disk hardware configuration problem“ (systém Windows nemohl být spuštµn kv¾li problému s konfigurací diskového hardwaru po²íta²e), „Could not read from selected boot disk“ (nebylo možné ²íst z vybraného spouštµcího disku) nebo „Check boot path and disk hardware“ (provµ½te spouštµcí cestu a diskový hardware). P¾í³ina Soubor Boot.ini byl odstranµn, je poškozen nebo se již neodkazuje na spouštµcí svazek, protože doplnµním nµjakého oddílu došlo ke zmµnµ názvu ARC (Advanced RISC Computing) daného svazku. ¤ešení SpusÆte konzolu pro zotavení a vykonejte „bootcfg /rebuild“. Tento p½íkaz zp¾sobí, že konzola pro zotavení projde jednotlivými svazky a bude hledat instalaci systému Windows. Jakmile odhalí nµjakou instalaci, zeptá se vás, zda ji má p½idat do souboru Boot.ini jako volbu spouštµní a jaký název v nabídce spouštµní jí má p½i½adit.
Poškození systému soubor P¾íznaky Existuje nµkolik zp¾sob¾, jakými se m¾že projevit poškození systémových soubor¾, což zahrnuje spustitelné soubory, knihovny DLL a ovlada²e. Jednou z možností je zpráva na prázdné obrazovce po testu POST systému BIOS ½íkající, že „Windows could not start because the following file is missing or corrupt“ (systém Windows nemohl být spuštµn, protože chybí nebo je poškozen následující soubor) s dále uvedeným názvem p½íslušného souboru a požadavkem na jeho p½einstalování. Další možností je zhroucení s modrou obrazovkou bµhem spouštµní ½íkající „STOP: 0xC0000135 {Unable to Locate Component}“ (nebylo možné najít komponentu). P¾í³iny Svazek, na nµmž se daný systémový soubor nachází, je poškozen nebo došlo k odstranµní ²i poškození jednoho nebo více systémových soubor¾. ¤ešení SpusÆte konzolu pro zotavení a vykonejte p½íkaz chkdsk. Chkdsk se pokusí opravit poškozený svazek. Pokud nenahlásí žádné problémy, obstarejte si záložní kopii p½íslušného systémového souboru. Podívejte se do adresá½e \Windows\ System32\DllCache, kam si systém Windows ukládá kopie mnoha systémových soubor¾ pro p½ístup sou²ásti ochrany soubor¾ systému Windows (Windows File Protection – viz doplnµk). Nem¾žete-li tu najít kopii p½íslušného souboru, podívejte se po ní na jiném systému na síti. Nezapomínejte, že záložní soubor musí být ze stejného servisního balí²ku nebo opravy, jako ten nahrazovaný. V nµkterých p½ípadech dojde k odstranµní nebo poškození více systémových soubor¾, takže proces opravy pak m¾že p½edstavovat nµkolik spouštµní a jejich selhání, jak budete soubory jednotlivµ dopl¹ovat. Myslíte-li si, že je poškození systémových soubor¾ rozsáhlé, zvažte obnovu systému ze záložního obrazu, jaký generuje nap½íklad Automated System Recovery – ASR (Automatické obnovení systému). Když spustíte Backup (nachází se ve složce Accesories – System Tools v nabídce tla²ítka Start), m¾žete vygenerovat záložní obraz ASR zahrnující všechny soubory na systémovém a spouštµcím svazku plus disketu s uloženými údaji o sys-
Hešení potíží se startem a spouštgním
301
témových discích a svazcích. Chcete-li obnovit systém z ASR, spusÆte jej z instala²ního média Windows a po výzvµ stisknµte klávesu F2. Nemáte-li zálohu, z níž by bylo možné systém obnovit, máte ještµ možnost vykonat opravnou instalaci Windows: SpusÆte systém z instala²ního média a postupujte podle pr¾vodce, jako byste vykonávali novou instalaci. Pr¾vodce se vás zeptá, zda chcete provést opravu nebo ²istou instalaci. Jakmile mu oznámíte, že se jedná o opravu, p½einstaluje instala²ní program všechny systémové soubory a nechá vaše data aplikací a nastavení registru beze zmµn.
KromÏ svÈ role jako interaktivnÌho p¯ihlaöovacÌho rozhranÌ a spr·vce relacÌ implementuje souË·st Winlogon takÈ ochranu soubor˘ systÈmu Windows (Windows File Protection ñ WFP). WFP, jeû je implementov·na ve dvou knihovn·ch DLL, konkrÈtnÏ \Windows\System32\ Sfc.dll a \Windows\System32\Sfc_os.dll, monitoruje zmÏny klÌËov˝ch ovladaˢ, spustiteln˝ch soubor˘ a knihoven DLL v nÏkolika adres·¯Ìch zahrnujÌcÌch vÏtöinu adres·¯˘ pod \Windows. K tomu vyuûÌv· nativnÌ verzi API ReadDirectoryChangesW. Kdyû WFP spat¯Ì, ûe doölo ke zmÏnÏ nÏjakÈho systÈmovÈho souboru uvedenÈho ve \Windows\System32\ Sfcfiles.dll (k zobrazenÌ soubor˘ zaznamenan˝ch v Sfcfiles.dll m˘ûete pouûÌt n·stroj Strings ze sÌdla www.sysinternals.com ), provϯÌ, zda je dan˝ soubor digit·lnÏ podeps·n spoleËnostÌ Microsoft (to je proces, s nÌmû se blÌûe sezn·mÌte v oddÌlu ÑInstalace ovladaˢî v kapitole 9). Je-li dan˝ soubor digit·lnÏ podeps·n spoleËnostÌ Microsoft, WFP tuto zmÏnu povolÌ a soubor zkopÌruje do svÈho z·loûnÌho adres·¯e. StandardnÏ se tento z·loûnÌ adres·¯ nach·zÌ v \Windows\System32\DllCache , tento ˙daj lze ale p¯ekr˝t definov·nÌm hodnoty registru HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\SFCDllCacheDir. Opravy a servisnÌ balÌËky vûdy instalujÌ systÈmovÈ soubory podepsanÈ spoleËnostÌ Microsoft. NenÌ-li d˘sledkem modifikace soubor, kter˝ nenÌ podeps·n spoleËnostÌ Microsoft, WFP nahradÌ zmÏnu z·loûnÌ verzÌ danÈho souboru z podadres·¯e DLLCache. Nedok·ûe-li v tomto adres·¯i komponenta Winlogon nalÈzt p¯Ìsluönou z·loûnÌ verzi, podÌv· se takÈ do cesty sÌùovÈ instalace, kdyû byl systÈm instalov·n ze sÌtÏ, nebo na instalaËnÌ mÈdium (k jehoû vloûenÌ v·s vyzve), jestliûe byl instalov·n z lok·lnÌho mÈdia.
Poškození systémového podregistru P¾íznaky Chybí-li nebo je-li poškozen podregistr System (který je popsán spole²nµ se soubory podregistr¾ v oddílu „Registr“ v kapitole 4), zavadµ² NTLDR zobrazí na prázdné obrazovce po testu POST systému BIOS zprávu „Windows could not start because the following file is missing or corrupt: \WINDOWS\SYSTEM32\CONFIG\ SYSTEM“ (systém Windows nebylo možné spustit, protože chybí nebo je poškozen následující soubor). P¾í³iny Podregistr System, který obsahuje konfigura²ní informace nezbytné pro spuštµní systému, je poškozen nebo vymazán. ¤ešení SpusÆte konzolu pro zotavení a vykonejte p½íkaz chkdsk na spouštµcím svazku, ²ímž opravíte jeho možné chyby. Není-li problém vy½ešen, obstarejte si záložní kopii podregistru System. Pokud jste provedli zálohování ASR systému nebo použili nástroj Windows Backup k zálohování stavu systému (což je jedna z voleb uživatelského rozhraní této utility), jsou kopie podregistr¾ z posledního
Spoušt?ní a vypínání
Ochrana soubor systému Windows
302
Kapitola 5 – Spouštgní a vypínání
zálohování uloženy v adresá½i \Windows\Repair. Sta²í tedy zkopírovat soubor s názvem System do adresá½e \Windows\System32\Config. Pracujete-li na systému Windows XP s aktivní obnovou systému (System Restore – popsáno v kapitole 12), ²asto máte možnost využít novµjší zálohu podregistr¾, v²etnµ podregistru System, z nejnovµjšího bodu obnovení. Z konzoly pro zotavení však nemusíte mít možnost p½istupovat k adresá½i s uloženými body obnovení, jímž je \System Volume Information. Verze konzoly pro zotavení z Windows XP Service Pack 1 umož¹ují p½ístup k tomuto adresá½i, to ale neplatí pro starší verze, není-li to p½ímo zadáno v zásadách lokálního zabezpe²ení daného systému. Toto omezení m¾žete v p½ípadµ pot½eby p½ekrýt pomocí editoru zásad místního zabezpe²ení, kterým zmµníte nastavení konzoly pro zotavení, jak již bylo popsáno. Pro získání p½ístupu k dalším adresá½¾m m¾žete rovnµž využít nástroje jiných výrobc¾. Dokážete-li p½istupovat k adresá½¾m bod¾ obnovení, m¾žete pro proniknutí k jejich podregistr¾m využít následující postup: 1. P½ejdµte do adresá½e, jehož název za²íná „_restore“ a který se nachází pod adresá½em \System Volume Information spouštµcího svazku. 2. Vyhledejte podadresá½ RP s nejvyšší ²íslem jako p½íponou (kup½íkladu „RP173“). 3. Zkopírujte soubor nazvaný _REGISTRY_MACHINE_SYSTEM z podadresá½e snapshot do \Windows\System32\Config\System. 4. Restartujte po²íta². Další možností je pokusit se opravit poškození pomocí nástroje Microsoft ChkReg. Ten se pokouší automaticky opravit narušení registru a spouští se z instala²ních disket Windows XP. Tento nástroj a instrukce k jeho použití najdete na adrese http://www.microsoft.com/downloads/details.aspx?displaylang=en&familyid=56d 3c201-2c68-4de8-9229-ca494362419c.
Pokud jste systém nikdy nezálohovali, nemáte p½ístup k bod¾m obnovení a nástroj ChkReg nedokáže poškození opravit (nebo vám p½íslušné podregistry chybµjí), pak m¾žete jako poslední pokus použít kopii podregistru System uloženou v adresá½i \Windows\Repair. Instala²ní program Windows vytvá½í kopii podregistru System po
dokon²ení instalace, takže tím ztratíte všechny od té doby zadané zmµny konfigurace systému a instalace ovlada²¾ za½ízení.
Zhroucení nebo zastavení po úvodní obrazovce P¾íznaky Do této kategorie spadají problémy, jež se vyskytují po zobrazení úvodní obrazovky systému Windows, zobrazení pracovní plochy nebo po p½ihlášení. Mohou se projevovat modrou obrazovkou zhroucení nebo zablokováním, kdy je celý systém „zatuhlý“, pop½ípadµ se sice pohybuje kurzor myši, jinak ale systém nereaguje. P¾í³iny Tyto potíže jsou témµ½ vždy d¾sledkem chyby v nµjakém ovlada²i za½ízení, mohou být ale také výsledkem poškození jiného podregistru registru, než je podregistr System. ¤ešení O nápravu problému se m¾žete pokusit v nµkolika krocích. Nejprve zkuste použít poslední známou funk²ní konfiguraci (LKG). Jak jsme si ½íkali d½íve v této kapitole a v oddílu „Služby“ v kapitole 4, LKG se skládá z ½ídicí množiny registru
Hešení potíží se startem a spouštgním
303
Jak tu již bylo ½e²eno, p½i spuštµní LKG systém ukládá ½ídicí množinu, které se vyhýbáte, a ozna²uje ji za selhávající konfiguraci. Tuto selhávající ½ídicí množinu m¾žete využít v p½ípadech, kdy se LKG poda½í systém spustit, ke zjištµní p½í²iny selhávání systému. Sta²í si vyexportovat obsah aktuální ½ídicí množiny úspµšného spuštµní a selhávající ½ídicí množinu do soubor¾ .reg. K tomu využijte funkci exportu nástroje Regedit, jak ji najdete v nabídce File (nebo pod nabídkou Registry, pracujete-li na Windows 2000): 1. SpusÆte Regedit a vyberte HKLM\System\CurrentControlSet. 2. Zvolte Export z nabídky File a zadejte uložení do souboru nazvaného dobry.reg. 3. Otev½ete si HKLM\System\Select, na²tµte hodnotu Failed a vyberte podklí² nazvaný HKLM\System\ControlXXX, kde XXX p½edstavuje hodnotu Failed. 4. Exportujte obsah této ½ídicí množiny do souboru spatny.reg. 5. Pomocí aplikace Wordpad (najdete ji ve složce Accessories v nabídce tla²ítka Start) nahraÅte všechny výskyty „ CurrentControlSet“ v souboru dobry.reg za „ControlSet“. 6. Pomocí WordPadu zmµ¹te všechny výskyty „ControlXXX “ (kde XXX nahradíte hodnotou Failed ½ídicí množiny) v souboru spatny.reg za „ControlSet“. 7. SpusÆte Windiff ze sady podp¾rných nástroj¾ a oba soubory porovnejte. Rozdíl¾ mezi selhavší ½ídicí množinou a tou dobrou m¾že být mnoho, takže své zkoumání byste mµli zamµ½it na zmµny pod klí²em Control a také pod klí²i Parameters ovlada²¾ a služeb zaregistrovaných v podklí²i Services. Nevšímejte si zmµn podklí²¾ Enum klí²¾ registru ovlada²¾ ve vµtvi Services ½ídicí množiny. Je-li problém, s nímž bojujete, zp¾soben nµjakým ovlada²em nebo službou, která byla na systému od posledního úspµšného spuštµní, tak ani LKG nezajistí spuštµní systému. Podobnµ platí, že LKG nepom¾že ani v situacích, kdy došlo k problematické zmµnµ konfigurace mimo ½ídicí množinu nebo p½ed posledním úspµšným spuštµním. V takových p½ípadech je další možností vyzkoušet nouzový režim (popsaný již d½íve v této kapitole). Pokud se systém úspµšnµ spustí v nouzovém režimu a vy víte, že nµjaký konkrétní ovlada² zp¾sobuje selhání normálního spuštµní, m¾žete jej nyní deaktivovat pomocí správce za½ízení (je p½ístupný z karty Hardware ovládacího panelu System). Vyberte p½íslušný ovlada² a z místní nabídky pak zvolte Disable. Pracujete-li na systému Windows XP nebo Windows Server 2003, daný ovlada² jste nedávno aktualizovali a myslíte-li si, že tato aktualizace zavedla na systém chybu, m¾žete pomocí správce za½ízení zadat také zmµnu ovlada²e na jeho p¾vodní verzi. Chcete-li takto postupovat, tak nejprve na daný ovlada² poklepejte, ²ímž si otev½ete dialogové okno jeho vlastností, a pak stisknµte tla²ítko Roll Back Driver (Vrátit zmµny ovlada²e) na kartµ Drivers (Ovlada²).
Spoušt?ní a vypínání
použité k poslednímu úspµšnému spuštµní systému. Protože ½ídicí sada obsahuje základní konfiguraci systému a databázi registrace ovlada²¾ za½ízení a služeb, m¾žete se použitím té verze, jež nezahrnuje zmµny nebo novµ instalované ovlada²e ²i služby, vyhnout zdroji problém¾. P½ístup k poslední známé funk²ní konfiguraci získáte stiskem klávesy F8 na po²átku procesu spouštµní. Zobrazí se stejná nabídka, jejímž prost½ednictvím m¾žete p½ejít do nouzového režimu.
304
Kapitola 5 – Spouštgní a vypínání
Na systémech Windows XP s aktivní možností obnovení systému je další možností p½i selhání LKG vrátit zpµt stav systému (jak jej definuje obnovení systému) na nµjaký p½edchozí bod v ²ase. Nouzový režim detekuje existenci bod¾ obnovení, a jakmile je najde, dotáže se vás, zda se chcete p½ihlásit k dané instalaci a zajistit manuální diagnostiku a opravu, nebo zda chcete spustit System Restore Wizard (Pr¾vodce obnovením systému). Využití prvku obnovení systému k opµtnému zajištµní spustitelnosti systému je zajímavá volba v situaci, kdy znáte p½í²inu problému a chcete opravu provést automaticky nebo když p½í²inu sice neznáte, ale nechcete ztrácet ²as jejím p½esným zjišÆováním. Není-li obnovení systému využitelnou volbou nebo chcete-li stanovit p½í²inu hroucení p½i normálním spouštµní, když se zárove¹ systém bez potíží rozbíhá v nouzovém režimu, pokuste se získat protokol spouštµní neúspµšného rozbµhu systému – stiskem F8 si zobrazte speciální nabídku spouštµní a zvolte možnost protokolování spouštµní. Jak již bylo v této kapitole vysvµtleno, správce relací (\Windows\System32\ SMSS.exe) ukládá protokol spouštµní do souboru \Windows\ntbtlog.txt, kde je záznam ovlada²¾ za½ízení, které systém zavádµl a které se rozhodl nezavádµt. Dojde-li tedy ke zhroucení nebo zablokování až po inicializaci správce relací, m¾žete získat protokol spouštµní. Když pak systém spustíte v nouzovém režimu, p½idá nové položky k existujícímu spouštµcímu protokolu. Vyjmµte ty ²ásti protokolovacího souboru, jež odpovídají selhavšímu pokusu spouštµní v bezpe²ném režimu, do samostatných soubor¾. Odstra¹te ½ádky obsahující text „Did not load driver“ (nebyl zaveden ovlada²) a pak soubory porovnejte nµjakým nástrojem textového porovnávání, jako je nap½. Windiff. Postupnµ deaktivujte ovlada²e zavádµné bµhem normálního spouštµní, nikoli však p½i spouštµní v nouzovém režimu, až dokud se systém úspµšnµ nerozbµhne. (Pak zase povolte ty ovlada²e, které za problém nebyly odpovµdné.) Nem¾žete-li získat protokol z normálního spouštµní (kup½íkladu proto, že se systém hroutí p½ed inicializací správce relací), hroutí-li se systém také bµhem spouštµní v nouzovém režimu nebo když porovnání protokol¾ normálního spouštµní a spouštµní v nouzovém režimu neodhalí žádné významné rozdíly (když se kup½íkladu ovlada² zp¾sobující zhroucení systému v normálním spouštµní zavádí až po inicializaci správce relací), pak ještµ m¾žete vyzkoušet Driver Verifier ve spojení s analýzou výpisu zhroucení. (Více se o tµchto tématech dozvíte v kapitole 14.)
5.3 Vypnutí Je-li nµkdo p½ihlášen a ur²itý proces iniciuje voláním funkce ExitWindowsEx vypnutí systému Windows, odešle se zpráva CSRSS instruující subsystém v tom smyslu, že má zajistit vypnutí. CSRSS zase p½evezme identitu volajícího a odešle zprávu systému Windows skrytému oknu vlastnµnému komponentou Winlogon, v níž ½íká, že má zajistit vypnutí systému. Winlogon následnµ p½evezme identitu aktuálnµ p½ihlášeného uživatele (který m¾že, ale nemusí mít stejný kontext zabezpe²ení jako uživatel, jenž vypnutí systému inicioval) a zavolá funkci ExitWindowsEx s ur²itými speciálními interními p½íznaky. Toto volání znovu zp¾sobí odeslání zprávy CSRSS požadující vypnutí systému. Tentokrát však vidí subsystém CSRSS p½íchozí požadavek od Winlogon a v cyklu prochází všemi procesy v dané relaci p½ihlášení interaktivního uživatele (opµt se
Vypnutí
305
Pokud dané vlákno neskon²í p½ed vypršením intervalu, zobrazí Csrss dialogové okno zablokovaného procesu, jak je uvedené na obrázku 5.5. (Toto dialogové okno m¾žete deaktivovat zmµnou hodnoty registru HKCU\Control Panel\Desktop\AutoEndTasks na 1.) Uvedené dialogové okno ½íká, že se ur²itý program dostate²nµ rychle neukon²uje a nabízí uživateli možnost buÅ daný proces násilnµ ukon²it, nebo p½erušit vypínání systému. (Tomuto dialogovému oknu není p½i½azena žádná doba vypršení, což znamená, že požadavek na vypnutí se v tomto místµ m¾že trvale zastavit.)
OBRÁZEK 5.5: Dialogové okno zablokovaného programu
Skon²í-li dané vlákno p½ed vypršením povolené doby, pokra²uje Csrss v odesílání dvojic zpráv WM_QUERYENDSESSION a WM_ENDSESSION ostatním vlákn¾m v daném procesu, která vlastní okna. Jakmile skon²í všechna vlákna daného procesu, která vlastní okna, ukon²í Csrss vlastní proces a p½ejde k dalšímu procesu v interaktivní relaci.
EXPERIMENT: Sledování HungAppTimeout VyuûitÌ hodnoty registru HungAppTimeout si m˘ûete vyzkouöet, spustÌte-li Notepad (Pozn·mkov˝ blok), zad·te do nÏj nÏjak˝ text a pak se odhl·sÌte. Jakmile uplyne doba zadan· hodnotou registru HungAppTimeout , nabÌdne v·m Csrss.exe dialogovÈ okno dotazujÌcÌ se, zda chcete ukonËit proces Notepad, kter˝ s·m neskonËil, protoûe Ëek·, aû mu ¯eknete, zda m· uloûit zadan˝ text do souboru. Stisknete-li v zobrazenÈm dialogovÈm oknÏ tlaËÌtko Cancel, p¯eruöÌ Csrss.exe vypÌn·nÌ systÈmu.
Najde-li Csrss nµjakou konzolovou aplikaci, vyvolá ½ídicí handler konzoly odesláním události CTRL_LOGOFF_EVENT. (Událost CTRL_SHUTDOWN_EVENT p½i vypínání dostávají pouze procesy služeb.) Vrátí-li handler FALSE, Csrss daný proces násilnµ ukon²í. Pokud handler vrátí TRUE nebo nezareaguje po dobu definovanou hodnotou registru
Spoušt?ní a vypínání
nejedná o uživatele, který vypnutí požadoval) v po½adí opa²ném vzhledem k jejich úrovni vypnutí (shutdown level). Voláním funkce SetProcessShutdownParameters m¾že proces zadávat úrove¹ vypnutí indikující systému, kdy se má ukon²it vzhledem k ostatním proces¾m. Platné úrovnµ vypnutí jsou v rozsahu od 0 do 1023 a výchozí úrovní je 640. Kup½íkladu Explorer (Pr¾zkumník) nastavuje svou úrove¹ vypnutí na hodnotu 2 a správce úloh specifikuje 1. Jednotlivým vlákn¾m s cyklem zpráv Windows každého procesu, který vlastní okno nejvyšší úrovnµ, odešle Csrss zprávu WM_QUERYENDSESSION. Pokud vlákno vrátí TRUE, m¾že vypínání systému pokra²ovat. Csrss pak takovému vláknu odesílá zprávu WM_ENDSESSION požadující jeho ukon²ení. Csrss ²eká na ukon²ení vlákna po dobu zadanou v HKCU\Control Panel\Desktop\HungAppTimeout (výchozím údajem je 5000 milisekund).
306
Kapitola 5 – Spouštgní a vypínání
HKCU\Control Panel\Desktop\WaitToKillAppTimeout (výchozí údaj je 20 000 milisekund), Csrss zobrazí okno zablokovaného programu uvedené na obrázku 5.5. Winlogon dále zavolá funkci ExitWindowsEx, aby subsystém Csrss ukon²il všechny
procesy COM, jež jsou sou²ástí interaktivní uživatelské relace. V tomto okamžiku byly ukon²eny všechny procesy v interaktivní uživatelské relaci. Opµt zavolá ExitWindowsEx, tentokrát však v kontextu systémového procesu, jenž znovu odešle zprávu subsystému CSRSS, který pak hledá všechny procesy pat½ící systémovému kontextu a odesílá zprávy WM_QUERYENDSESSION/WM_ENDSESSION vlákn¾m GUI (jako p½edtím). Místo CTRL_LOGOFF_EVENT však konzolovým aplikacím se zaregistrovanými ½ídicími handlery odesílá CTRL_SHUTDOWN_EVENT. Vzpome¹te si, že SCM je konzolový program, který si registruje ½ídicí handler. Jakmile obdrží požadavek na vypnutí, odešle zase ½ídicí zprávu vypnutí všem službám, které si zaregistrovaly upozornµní na vypnutí. Podrobnosti o vypínání služeb (nap½íklad dobu vypršení vypnutí, jakou CSRSS používá pro správce SCM), najdete v oddílu „Služby“ v kapitole 4. T½ebaže CSRSS využívá stejné doby vypršení, jako když ukon²uje uživatelské procesy, nezobrazuje žádná dialogová okna ani násilnµ neukon²uje žádné procesy. (Hodnoty registru, odpovídající dobám vypršení platným pro systémový proces, se p½ebírají z výchozího uživatelského profilu.) Tato vypršení prostµ jen dávají systémovým proces¾m možnost uklidit po sobµ a skon²it, než dojde k vypnutí systému. Proto p½i vlastním vypnutí systému ještµ mnoho systémových proces¾ bµží; p½íkladem jsou SMSS, Winlogon, SCM a LSASS. Jakmile Csrss skon²í s upozor¹ováním systémových proces¾ na to, že se systém vypíná, dokon²í Winlogon proces vypnutí zavoláním funkce NtShutdownSystem subsystému výkonné ²ásti. Tato funkce volá funkci NtSetSystemPowerState, která organizuje vypnutí ovlada²¾ a zbytku subsystému výkonné ²ásti (správce Plug and Play, správce napájení, bµhu systému, správce I/O, správce konfigurace a správce pamµti). Funkce NtSetSystemPowerState kup½íkladu volá správce I/O, který má za úkol odeslat vypínací pakety I/O všem ovlada²¾m za½ízení, jež požadovaly upozornµní na vypnutí. Tato akce dává ovlada²¾m za½ízení možnost p½ed vypnutím Windows vykonat všechna zvláštní zpracování vyžadovaná jejich za½ízeními. Správce konfigurace zapíše všechna modifikovaná data registru na disk a správce pamµti zase zapíše do p½íslušných soubor¾ všechny zmµnµné stránky obsahující souborová data. Je-li aktivní volba vy²ištµní stránkovacího souboru p½i vypínání systému, tak správce pamµti stránkovací soubor vy²istí právµ nyní. Správce I/O se zavolá podruhé, aby mohl informovat ovlada²e systému soubor¾, že dochází k vypnutí systému. Vypnutí systému kon²í ve správci napájení. Akce provádµná správcem napájení závisí na tom, zda uživatel zadal vypnutí, restartování nebo snížení p½íkonu.
5.4 Závgr V této kapitole jsme detailnµ probrali kroky spouštµní a vypínání systému Windows (jak v normálním stavu, tak i p½i chybách). Zatím jsme se seznamovali s celkovou strukturou Windows a základními mechanismy zajišÆujícími fungování systému, jeho bµh a nakonec i vypnutí. S tµmito základy jsme p½ipraveni na detailnµjší pr¾zkum jednotlivých komponent výkonné ²ásti. Za²neme procesy a vlákny.