標籤:c style blog a http ext
Windows 結構圖
Windows系統核心結構和組件
以上清晰的表現了Windows的主要結構,使我們對系統的構成有個大概的認識,下面介紹一下Windows會話登入大致流程:
1、核心模式的系統線程初始化Windows執行體和核心,最後階段Smss(會話管理)進程。
2、Smss負責完成一系列操作,如開啟額外分頁檔,建立系統內容變數等,並將Csrss.exe(子系統進程)和Winlogon啟動,Winlogon進程依次建立其他系統進程。
3、Smss的主線程負責監視Csrss和winlogon,一旦Csrss和Winlogon非正常終止,Smss讓系統崩潰。
4、Smss等待載入子系統的請求、調試事件,以及建立新的終端伺服器會話。
5、當Smss接到建立會話的請求時,調用NtSetSystemInformation,建立核心模式的會話資料結構;調用記憶體管理器函數MmSessionCreate,建立會話虛擬位址空間【包含會話中的換頁記憶體池,Win32子系統的核心模式部分Win32k.sys等】,然後Smss為該會話建立Winlogon和Csrss執行個體。
6、Winlogon登入進程處理互動式使用者的登入和登出。當安全注意序列SAS按鍵組合被按下,Winlogon會接到使用者登入請求。
【Winlogon在使用者登入、登出、截取鍵盤SAS時是活動的,它是負責處理這些互動工作的進程】
7、登入過程的身份識別和認證是在GINA.dll中實現的【開發人員可以提供自己的GINA DLL實現其他的身份識別和認證機制】。
8、使用者名稱和密碼捕捉到後,被送到本地安全證明伺服器進程lsass.exe進行認證。lsass.exe檢查口令是否符合儲存在活動目錄或者SAM中的口令資訊。
9、認證完成後,lsass調用安全引用監視器中的函數NtCreateToken產生一個存取權杖對象,其包含了目前使用者的安全輪廓。之後,winlogon利用此存取權杖來建立使用者會話中的初始進程,此初始進程儲存在註冊表【HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon】下Userinit中。
10、Userinit執行該使用者環境中的一些初始化工作(比如運行登入指令檔、應用組策略),然後再註冊表中尋找Shell值,並建立進程來運行外殼程式Explorer.exe。
至此會話建立完成。
特別標註:
此文所有內容均來自《深入解析WINDOWS作業系統》(第四版)。