標籤:style class blog code http com
使用者態
使用者態有四類組件,這四類組件都是以進程形式存在的,也就是說,它們都有自己的進程地址空間(其實就是一套頁表)。
1. System Support Processes
這些是固化的進程,也就是說是作業系統結合在一起的進程。
比如logon process(winlogon.exe),Session manager(smss.exe)。
?
1 2 3 4 5 6 |
Session Manager [smss.exe] Local Session Manager [lsm.exe] Service Control Manager [services.exe] Local Security Authority [lsass.exe] Winlogon [winlogon.exe] Wininit [wininit.exe] |
它們都不屬於service,因為它們都不是由SCM(Service Control Manager)啟動的。
2. Service Processes
Service進程是由SCM啟動的,它們與user logon是獨立的,因為有些service的啟動時機比winlogon.exe還早。
Task Scheduler和Print Spooler都是services。
?
1 |
Service Host [svchost.exe] |
3. User Applications
就是常說的應用程式。
4. Environment Subsystem Server Processes
就是常說的“環境子系統”,也就是“Win32子系統”。
?
Subsystem Dynamic Libraries
由四個dll組成:
?
1 2 3 4 |
Kernel32.dll Advapi32.dll User32.dll Gdi32.dll |
它們實際上是Service Processes和User Applications的一部分,以dll的形式載入到它們的進程地址空間中去的。
它們的作用是向Service Processes和User Applications提供Win32 API介面。
Win32 API在實現上分為三類:
1. 完全在這四個dll的內部實現。
2. 通過這四個dll,調用更加底層的(核心態,比如核心或者驅動)實現。
3. 這四個dll與Environment Subsystem Server Processes建立C/S通訊模型,dll作為client請求Win32子系統的server進程(使用者態進程)來提供相應的實現。
核心態
核心態組件分為以下幾類:
1. Windows Executive
可以理解為核心態的管理程式,其實就是各個模組子系統。
比如記憶體管理模組,進程與線程管理模組,安全模組,IO模組,網路模組,以及處理序間通訊模組。
2. Windows Kernel
狹義上的核心,提供核心態中的核心操作,比如線程調度與切換,中斷和異常的分發與處理,以及多處理的同步等等。
它其實就是一組函數的集合。
3. Device Driver
核心態驅動。
4. HAL
Hardware Abstract Layer
用來隱藏與平台相關的細節,並且向上提供統一的API介面。
5. Windowing and Graphics System
視窗與繪圖系統。用來提供GUI相關功能。
這5個組件大部分都存在於一個Ntoskrnl.exe中,當然一些第三方的driver除外。
Windows Subsystem
Windows子系統包含兩部分:
即上面所描述的使用者態的Environment Subsystem Service Processes和核心態的Windowing and Graphics System。
使用者態的Win32子系統服務進程?
1 2 3 4 5 |
[csrss.exe] Basesrv.dll Winsrv.dll Csrsrv.dll |
向Win32 Subsystem dll代表的client提供以下功能支援:
1. Console Windows(命令列視窗,即不帶GUI功能,不涉及到Win32k.sys)
2. 建立和刪除Process/Thread
3. Side-by-Side(Sxs)支援
等等。
核心態的Win32k.sys驅動
提供以下功能:
1. 視窗管理器,以及與GUI相關的輸入輸出裝置,訊息傳遞等機制。
2. 提供GDI繪圖庫。
3. DirectX的支援(在另一個驅動Dxgkrnl.sys中實現)
Ntdll
Executive Kernel HAL Device Driver Subsystem Processes