Windows boot process

Bootloader phase



  1. BIOS 做 POST
  2. BIOS 讀 MBR,NTLDR 存在第一個 sector。將 NTLDR 載入記憶體,並轉移控制權至 NTLDR 的 entry point(NTLDR 包含兩個部份:StartUp module 跟 OSLoader。StartUp module 負責將 CPU 切換為 protected mode,以便之後能夠建立 IDT、GDT、page tables 跟啟動 paging)
  3. NTLDR 中的 StartUp 切換 CPU 至 protect mode,產生足夠的 page table 讓 16MB 以下記憶體能夠存取後,啟用 paging
  4. OSLoader 初始化 IDE-based system 跟 display。如果是 SCSI 介面的話,則載入 NTBOOTDD.SYS 來做磁碟存取
  5. 讀取 boot.ini,根據裡頭的內容到 active partition 載入 NTDETECT.COM。NTDETECT.COM 是一隻 16 bits real mode 的程式,故 NTLDR 切至 real mode
  6. NTDETECT.COM 呼叫 BIOS 來取得/偵測
       * 放在 CMOS 裡的日期時間資訊
       * Bus 種類,以及在 bus 上的裝置
       * 磁碟數目、大小及型式
       * 系統上 mouse input device 的種類
       * 系統上 parallel port
       * Video adapter
  7. NTLDR 切回 protect mode
  8. 載入 NTOSKRNL.EXE 跟 HAL.DLL,進入 kernel loading phase

Kernel loading phase



  1. ntoskrnl.exe -> hal.dll -> kdcom.dll -> bootvid.dll
  2. 讀取 registry
  3. NTLDR 呼叫 NTOSKRNL.EXE 的 main function,準備環境來跑 win32 native application
  4. 初始化 interrupt controller、memroy manager(產生 system cache、paged/non-paged memory pool)、object memroy,接著 process manager assign security token 給系統第一個 process 跟它自己。第一個 process 為 system idel process 跟 System process(pid 都為 0)
  5. 載入所需要的 device driver。注意這邊只載入,但不初始化 driver。這階段使用者在 XP 會看到 progress bar 在跑,在 Vista/7 會看到 animation
  6. NTOSKRNL.EXE 呼叫 session manager, SMSS.EXE
  7. SMSS.EXE 載入 windows subsystem (win32k.sys) 以及 CSRSS.EXE 並啟動WINLOGON.EXE
  8. WINLOGON.EXE 啟動 SCM,啟動 LSASS.EXE,並呼叫 GINA 來顯示出一個 logon dialog box
  9. SCM 初始化 auto-start device driver 跟 windows service
  10. 使用者登入

Logon process



  1. GINA 將使用者的 username/password/domain 傳回給 Winlogon,Winlogon 將此資料傳給 LSASS.EXE

  2. LSASS.EXE 套用 local security policy,使用者成功登入

  3. Winlogon 更新 LastKnownGood control set

  4. 套用 user group policy

  5. 啟動 explorer.exe

  6. 啟動在 RunOnce/Run 的程式。Local machine 比 current user 還早跑,RunOnce 比 Run 還早跑

留言

熱門文章