理解Windows内核模式与用户模式(新)
版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。
1、基礎(chǔ)
運行 Windows 的計算機中的處理器有兩個不同模式:“用戶模式”和“內(nèi)核模式”。根據(jù)處理器上運行的代碼的類型,處理器在兩個模式之間切換。應用程序在用戶模式下運行,核心操作系統(tǒng)組件在內(nèi)核模式下運行。多個驅(qū)動程序在內(nèi)核模式下運行,但某些驅(qū)動程序在用戶模式下運行。
當啟動用戶模式的應用程序時,Windows 會為該應用程序創(chuàng)建“進程”。進程為應用程序提供專用的“虛擬地址空間”和專用的“句柄表格”。由于應用程序的虛擬地址空間為專用空間,一個應用程序無法更改屬于其他應用程序的數(shù)據(jù)。每個應用程序都孤立運行,如果一個應用程序損壞,則損壞會限制到該應用程序。其他應用程序和操作系統(tǒng)不會受該損壞的影響。
用戶模式應用程序的虛擬地址空間除了為專用空間以外,還會受到限制。在用戶模式下運行的處理器無法訪問為該操作系統(tǒng)保留的虛擬地址。限制用戶模式應用程序的虛擬地址空間可防止應用程序更改并且可能損壞關(guān)鍵的操作系統(tǒng)數(shù)據(jù)。
在內(nèi)核模式下運行的所有代碼都共享單個虛擬地址空間。這表示內(nèi)核模式驅(qū)動程序未從其他驅(qū)動程序和操作系統(tǒng)自身獨立開來。如果內(nèi)核模式驅(qū)動程序意外寫入錯誤的虛擬地址,則屬于操作系統(tǒng)或其他驅(qū)動程序的數(shù)據(jù)可能會受到損壞。如果內(nèi)核模式驅(qū)動程序損壞,則整個操作系統(tǒng)會損壞。
此圖說明了用戶模式組件與內(nèi)核模式組件之間的通信。
2、內(nèi)核層次架構(gòu)
下面是內(nèi)核的層次劃分:
硬件抽象層(HardwareAbstraction Layer) (HAL) (hal.dll)
最底層隔離硬件的,底層的第三方驅(qū)動程序就運行在這層。
內(nèi)核(Kernel)
實現(xiàn)操作系統(tǒng)的一些底層服務(wù),比如線程調(diào)度,多處理器的同步,中斷/異常處理等。
執(zhí)行體(Executive)(ntoskrnl.exe)
實現(xiàn)基本的操作系統(tǒng)服務(wù),比如基本的線程進程管理,內(nèi)存管理, IO及進程間通訊等。
窗口圖形子系統(tǒng)(Windows?Graphics Subsystem)
由win32K.sys在內(nèi)核層實現(xiàn),用戶界面相關(guān)都依賴該層,User32.dll的大部分功能都由該層實現(xiàn)。
用戶層關(guān)鍵進程
Windows系統(tǒng)在用戶層有幾個關(guān)鍵的系統(tǒng)進程:
Smss.exe(session manager Subsystem)
關(guān)于Session的概念可以參考我的這篇Sessions, Window Stationsand Desktops,在操作系統(tǒng)啟動時會創(chuàng)建一個不與任何Session關(guān)聯(lián)的Smss.exe管理者實例,然后當有用戶登錄時它會為每個Sessin拷貝一份與之關(guān)聯(lián)的Smss.exe實例,然后由該關(guān)聯(lián)的Smss.exe實例啟動winlogon.exe和csrss.exe.
WinLogon.exe
該進程管理用戶的登錄和注銷,我們按Ctrl+Alt+Del出現(xiàn)的界面和登錄后出現(xiàn)的桌面窗口都是由它啟動的。
Csrss.exe( Client/Server Runtime Subsystem)
我們可以看到我們的桌面窗口(GetDesktopWindow)是由該進程創(chuàng)建的,該進程主要負責Win32子系統(tǒng)的用戶模式部分(內(nèi)核模式部分由win32k.sys實現(xiàn))。
Lsass.exe(Local Security Authority Subsystem)
WinLogon.exe通過該進程驗證用戶登錄,登錄后產(chǎn)生安全訪問令牌對象,通過該令牌創(chuàng)建Explorer.exe,我們其他用戶進程都由Explorer.exe啟動,并且繼承了該令牌權(quán)限。
Services.exe
該進程簡稱為SCM(NT Service Control Manager),該進程負責啟動用戶態(tài)一些特殊進程,也就是我們通常所說的服務(wù)程序。
3、用戶模式調(diào)用內(nèi)核模式的方式
4、內(nèi)核模式調(diào)用用戶模式
??? 可以通過IOCTL的上下文傳遞,也可以通過APC (Asynchronous Procedure Call)直接調(diào)用。
5、進程間的通信
另外一種非常強大的用戶模式與內(nèi)核模式通訊方式,同時也支持進程間通訊,該方式就是ALPC(Advanced Local Procedure Call),該方式被操作系統(tǒng)大量使用, WinRT中的Broker進程也用到了它。
該方式實際上就4個核心函數(shù):nt!NtAlpcSendWaitReceivePort,nt!NtAlpcCreatePort, nt!NtAlpcConnectPort, Nt!AplcAcceptConnectPort, 大概原理如下:
總結(jié)
以上是生活随笔為你收集整理的理解Windows内核模式与用户模式(新)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文件服务器ping延时大,windown
- 下一篇: 深入解析windows XP/2003: