WINDOWS打開及關機內幕
作者:佚名 來源:本站 時間:2018-06-24 點擊:115次
WINDOWS的啟動流程
第一:NTLDR的作用過程
1.首先機器POST----BIOS----MBR----BOOT SECTOR----os的引導程序 WINDOWS的引導程序是NTLDR注意這個文件其實是個可執行文件,這里機器主要做的工作是:CPU從16的實模式到32的保護模式,啟用CPU的頁機制,如果磁盤是SCSI,則加載Ntbootdd.sys來訪問磁盤,否則用INT13來訪問。這里假如機器沒找到Ntldr這個文件,在FAT文件系統下,機器顯示"BOOT: Couldn't find NTLDRP",而在NTFS下顯示"NTLDR is missing"(這個沒有具體實驗過,是書上這么說的)
2.NTLDR裝載后就先CLS屏幕,首先檢查根目錄下有沒有合法的Hiberfil.sys,這個文件的作用是機器休眠的時候把內存中的所有信息保存到hiberfil.sys這個文件中,這個文件的大小始終和系統的物理內存大小一致。如果希望回收這個空間,請打開“控制面板”下的“電源管理”,選擇“休眠”選項卡,去掉“啟用休眠”這一復選項的選中標記,系統會自動消除hiberfil.sys文件。如果有就快速啟動到上次機器休眠的狀態。
3.接著處理Boot.ini,如果有多個的啟動項,那就顯示啟動菜單(如果只有一個默認的項,那就是我們立即就可以看到WINDOWS的啟動狀態條了) 處理BOOT.ini WINDOWS自帶的一個工具Bootcfg.exe,可以用這個工具修改,當然也可以自己用記事本打開boot.ini來修改,boot.ini的一些參數會保存在注冊表HKLM\System\CurrentControlSet\Control\SystemStartOptions下。關于boot.ini里面的參數大家可以去查閱資料。
4.下面就是NTLDR調用執行Ntdetect.com,作用是檢測的一些基本設備和配置信息 信息包括:CMOS里的時間日期信息,總線類型,磁盤的大小,類型,數目,輸入設備的信息,并口的信息,顯卡的類型,這些信息收集后保存在HKLM\HARDWARE\DESCRIPTION下面。接著就2000版本下顯示“Starting Windows”進程條,而在xp,2003下是顯示WINDOWS的LOGO
5.在顯示進程條的過程中,機器實際上是在加載系統相應的內核和HAL文件,一般是Ntoskrnl.exe 和Hal.dll這2個文件,如果這個過程中發現找不到文件,則會顯示"Windows could not start because the following file was missing or corrupt"這個信息。然后讀取注冊表SYSTEM HIVE(Windows\System32\Config\System),來決定需要加載的設備驅動,這些設備驅動都在SERVICE_BOOT_START (0)里面
6.然后加載Ntoskrnl.exe,這樣NTLDR的使命就結束了。
第二 Ntoskrnl.exe的作用過程這里主要分2個階段來初始化內核,最后創建the Session Manager subsystem (Smss)進程。
第三 Smss的作用過程
1.創建LPC port對象,為MSDOS定義符號連接,例如COM1、LPT1,假如安裝有Terminal Services,則創建\Sessions目錄
2.運行注冊表里HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\BootExecute定義的程序,一般默認的是運行Autochk
3.執行HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations表鍵中的延遲,刪除,改名操作
4.加載HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs 初始化paging files和注冊表
5.創建系統環境變量,這些定義在HKLM\System\CurrentControlSet\Session Manager\Environment
6.加載和初始化WIN32子系統的內核模塊Win32k.sys
7. 創建WIN32子系統服務器進程,包括Csrss, 創建Winlogon進程。 這里的2個進程其中一個出現異常,那系統都會中斷
第四 Winlogon Csrss過程
1.加載GINA模塊,默認為Msgina (\Windows\System32\Msgina.dll)
2.啟動服務進程Windows\System32\Services.exe
3.啟動Lsass(the local secyrity authentication subsystem)進程
4.Gina開始處理交互式登陸,登陸驗證成功后,Gina就運行HKLM\Software\Microsoft\Windows NT\CurrentVersion\WinLogon\Userinit,Userinit.exe執行的順序為:首先處理HKCU\Software\Policies\Microsoft\Windows\System\Scripts 和HKLM\Software\Policies\Microsoft\Windows\System\Scripts這里的腳本,然后處理組策略(假如有的話,運行\Windows\System32\Proquota.exe),最后運行HKCU\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell里的SHELL(如果不存在就運行HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell里的,一般這里默認的是EXPLORER.exe),注意這里也是最容易讓惡意軟件利用的地方。
5.最后就是啟動其他的啟動程序,服務。
WINDOWS的關機流程:
正常關機都是調用ExitWindowsEx這個函數,Csrss收到這個消息后,先給Winlogon所屬的窗口發關機消息,等Winlogon處理完后,Csrss然后給每個有關機級別的進程發關機消息(2種消息WM_QUERYENDSESSION/WM_ENDSESSION),這里的等待時間在HKCU\Control Panel\Desktop\HungAppTimeout這里設置,默認是5000 milliseconds,如果在這個時間范圍內有線程沒處理完,那就會彈出個窗口,讓用戶來結束,當然也可以設置讓系統自動結束,只要設置HKCU\Control Panel\Desktop\AutoEndTasks 為 1就可以了,對于控制臺應用程序,則Csrss發這個CTRL_LOGOFF_EVENT事件(服務進程是發CTRL_SHUTDOWN_ EVENT這個事件),同樣的流程,有個等待時間,設置在HKCU\Control Panel\Desktop\WaitToKillAppTimeout (默認為 20,000 milliseconds),接著同樣的處理系統進程,處理完后,Winlogon就調用NtShutdownSystem,這個函數在調用NtSetSystemPowerState來處理驅動和其他的一些子系統。這樣整個關機過程就完成了。
- 上一篇: Win7不用安裝直接“拷貝”就能用
- 下一篇: Windows運用迅速關機的危害