摘要:對Windows的啟動過程進行了研究,描述了計算機啟動過程需要經過的步驟,并分析了各個進程負責的工作。
關鍵詞:啟動過程;NTLDR工作過程;登陸過程
中圖分類號:TP391文獻標識碼:A文章編號:1009-3044(2009)32-9090-02
Analysis of Windows Startup Process
DING Zhi-yun
(Jiangsu Yancheng Technician College, Yancheng 224002, China)
Abstract:About the Windows startup process research, described thesteps of computer’s startup process, and analysis of the work of the various processes.
Key words: startup process; NTLDR work process; Log-in process
Windows啟動是一個非常復雜的過程,我們每天都在和Windows打交道,很多人甚至可能在一天當中要面對多次Windows的啟動過程,可是你知道在Windows的啟動過程背后隱藏著什么秘密嗎?在這一系列過程中都用到了哪些重要的系統文件?系統的啟動分為幾個步驟?在這些步驟中計算機中發生了什么事情?本文將試圖為你解釋上述的疑惑。以Windows XP為例詳細分析下啟動過程。大體啟動過程如圖1。
1 概述
首先按下電源開關時,主板開始加電,主板上的芯片組會接收到電信號,此時CPU開始復位(RESET),CPU每次復位都會執行0xFFFFFFF0這個地址的程序,此地址指向的就是BIOS,然后BIOS會檢測電腦的硬件,比如硬盤,光驅,網卡等等,檢測完畢BIOS會將操作權轉交給MBR(MAIN BOOT RECORD)既主引導扇區,其為512字節,其中有446為引導程序和出錯信息,另外64字節為分區表,最后兩個字節為55AA,代表主引導分區,MBR會從分區表中搜索引導分區既活動分區,找到活動分區后系統會加載活動分區引導扇區的引導代碼,此引導代碼會加載NTLDR(在操作系統初次安裝時活動分區就寫入了加載NTLDR這段代碼),NTLDR通常在c盤根目錄下,NTLDR完成一些基本操作后會將控制權交給內核文件NTOSKRNL,NTOSKRNL依賴于HAL.dll,BOOTVID.dll,和KDCOM.dll等幾個文件,固NTLDR會將它們一同加載。圖2中我們可以看見其加載的順序。
圖2
NTOSKRNL啟動時間比較長,你主要任務是內核的初始化,期間會調用一系列的函數,在我們看見進度條的時候其實就是復雜的初始化過程,初始化結束后NTOSKRNL就會創建系統的第一個進程SMSS.exe,隨后SMSS.exe會創建兩個進程CSRSS和WINLOGON進程,WINLOGON進程會創建三個進程,LSASS,SERVICES和 LOGONUI, LOGONUI 會啟動USERINIT進程,USERINIT進程會啟動SHELL,最后USERINIT會自動退出。
2 MBR結構
硬盤主引導扇區占據一個扇區,共512(200H)個字節,具體結構如下:
1) 硬盤主引導程序,位于該扇區的0-1BDH處;
2) 硬盤分區表,位于1BEH-1FDH處共64字節,每個分區表占用16個字節,共4個分區表,16個字節各字節意義如下:
0:自舉標志,80H為可引導分區,00為不可引導分區;
1~3:本分區在硬盤上的開始物理地址;
4:分區類型,其中1表示為12位FAT表的基本DOS分區;4為16位FAT表的基本DOS分區;5為擴展DOS分區;6為大于32M的DOS分區;其它為非DOS分區。
5~7:本分區的結束地址;
8~11:該分區之前的扇區數,即此分區第一扇區的絕對扇區號;
12~15:該分區占用的總扇區數。
3) 引導扇區的有效標志,位于1FEH-1FFH處,固定值為AA55H。
3 NTLDR工作工程
1) 使CPU從16位實模式進入到32位的保護模式,CPU默認情況下是16位的,我們需要將其轉為32位,這樣可以執行多用戶登陸。
2) 啟用CPU的頁機制,大家都知道虛擬內存吧,系統的物理內存總是有限的,所以需要在物理硬盤上劃分一塊區域用做虛擬內存,當我們打開某個程序或者文件卻暫時沒有用它時,系統會暫時將其存如硬盤,以節約寶貴的內存,當用戶需要用此文件時,系統會將其從硬盤調用內存,此文件在硬盤上默認是pagefile.sys
3) 如果發現有效的hiberfil.sys則加載并恢復Hibrtnate。hiberfil.sys是休眠文件,通常大小與物理內存一樣,比如當我們下班時可以將計算機設置為休眠模式,這樣當我們第二天開機后就可以將系統恢復到昨天的狀態。
4) 打開boot.ini文件,讀取并執行其中的設置,如果boot.ini文件中有多個選項,則顯示菜單讓用戶選擇;如果只有一項,則不顯示菜單而是直接跳過去。
5) 如果期間用戶按下F8,則會顯示相應選項,如安全模式,帶命令提示符的安全模式等等。
6) 加載并執行ntdetect.com,調用BIOS收集系統的基本信息(時間,系統類型,磁盤,顯卡等)保存到注冊表HKEY_LOCAL_MACHINE\\HARDWARE\\DESCRIPTION下。
7) 加載系統的內核NTOSKRNL.EXE,HAL.dll,BOOTVID.dll,和KDCOM.dll等幾個文件。
4 NTOSKRNL.EXE的工作過程
NTOSKRNL的工作過程很復雜,期間涉及很多函數的調用,這些函數的調用我們是不需要掌握的,我們只需要知道出現長時間的windows logo滾動條的背后是內核NTOSKRNL.EXE的初始化過程,既一系列函數的執行過程。
smss.exe(Session Manager Subsystem)是微軟Windows操作系統的一部分。該進程調用對話管理子系統和負責操作你系統的對話。這個程序對系統的正常運行是非常重要的,我們要著重注意在注冊表中的HKEY_LOCAL_MACHINE\\SYSTEM\\ControlSet001\\Control\\Session Manager下BootExecute鍵值,HKEY_LOCAL_MACHINE\\SYSTEM\\ControlSet001\\Control\\Session Manager\\Memory Management下pagingFiles鍵值,HKEY_LOCAL_MACHINE\\SYSTEM\\ControlSet001\\Control\\Session manager\\SubSystems下Kmode和Windows鍵值,其工作過程如圖3。
csrss.exe(Microsoft Client/Server Runtime Server Subsystem)是微軟客戶端/服務端運行時子系統。該進程管理Windows圖形相關任務。
5 WinLogon的工作過程
WinLogon進程會創建三個進程,LSASS(Local Security Authority Subsystem Service),SERVICES和 LOGONUI,其中LSASS用來管理本地安全的,比如用戶名和密碼的驗證,SERVICES用來管理服務的啟動和終止,LOGONUI是用來顯示登陸畫面的。當用戶輸入用戶名和密碼時WinLogon(GINA.dll)將用戶名和密碼發給LSASS,LSASS調用驗證模塊對用戶名和密碼進行驗證,如果通過則創建一個訪問令牌對象,LOGONUI會啟動USERINIT進程(默認啟動HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon下Userinit下存放的程序,其值是c:\\windows\\system32\\userinit.exe),隨后UERINIT會啟動一些登陸腳本和其他自啟動程序,另外還會啟動SHELL進程,過程如圖4。
6 UserINIT的工作過程
UserINIT執行登陸和初始化腳本,其位置在組策略—計算機配置—windows設置—“腳本--(登陸/注銷)”和“組策略—用戶配置—windows設置—“腳本--(登陸/注銷)”如圖5,6。
然后啟動HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogo下shell鍵下的程序,默認是 Explorer.exe,接著啟動HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run和HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run下的鍵值。USERINIT完成工作自動退出。
參考文獻:
[1] 顏玉蘭.計算機組裝與維修教程[M].北京:科學出版社,2003:110-150.
[2] 楊季文.80X86匯編語言程序設計教程[M].北京:清華大學出版社,1998:45-90.
[3] 謝希仁.計算機網絡[M].北京:電子工業出版社,1999:279-284.