內(nèi)核層次架構(gòu)windows程序運(yùn)行分為內(nèi)核模式和用戶模式,內(nèi)核模式可以訪問(wèn)所有的內(nèi)存地址空間, 并且可以訪問(wèn)所有的CPU指令。一般程序運(yùn)行在用戶模式, 通過(guò)系統(tǒng)調(diào)用切換到內(nèi)核模式執(zhí)行系統(tǒng)功能,Windows系統(tǒng)通過(guò)這種方式來(lái)確保系統(tǒng)的安全和穩(wěn)定。
下面是內(nèi)核的層次劃分:硬件抽象層(Hardware Abstraction Layer) (HAL) (hal.dll)最底層隔離硬件的, 底層的第三方驅(qū)動(dòng)程序就運(yùn)行在這層。內(nèi)核 (Kernel)實(shí)現(xiàn)操作系統(tǒng)的一些底層服務(wù),比如線程調(diào)度, 多處理器的同步,中斷/異常處理等。執(zhí)行體 (Executive)(ntoskrnl.exe)實(shí)現(xiàn)基本的操作系統(tǒng)服務(wù),比如基本的線程進(jìn)程管理,內(nèi)存管理, IO及進(jìn)程間通訊等。窗口圖形子系統(tǒng)(Windows Graphics Subsystem)由win32K.sys在內(nèi)核層實(shí)現(xiàn), 用戶界面相關(guān)都依賴該層, User32.dll的大部分功能都由該層實(shí)現(xiàn)。用戶層關(guān)鍵進(jìn)程Windows系統(tǒng)在用戶層有幾個(gè)關(guān)鍵的系統(tǒng)進(jìn)程:Smss.exe (session manager Subsystem)關(guān)于Session的概念可以參考我的這篇Sessions, Window Stations and Desktops, 在操作系統(tǒng)啟動(dòng)時(shí)會(huì)創(chuàng)建一個(gè)不與任何Session關(guān)聯(lián)的Smss.exe管理者實(shí)例, 然后當(dāng)有用戶登錄時(shí)它會(huì)為每個(gè)Sessin拷貝一份與之關(guān)聯(lián)的Smss.exe實(shí)例,然后由該關(guān)聯(lián)的Smss.exe實(shí)例啟動(dòng)winlogon.exe和csrss.exe.WinLogon.exe該進(jìn)程管理用戶的登錄和注銷, 我們按Ctrl+Alt+Del出現(xiàn)的界面和登錄后出現(xiàn)的桌面窗口都是由它啟動(dòng)的。Csrss.exe ( Client/Server Runtime Subsystem)我們可以看到我們的桌面窗口(GetDesktopWindow)是由該進(jìn)程創(chuàng)建的, 該進(jìn)程主要負(fù)責(zé)Win32子系統(tǒng)的用戶模式部分(內(nèi)核模式部分由win32k.sys實(shí)現(xiàn))。Lsass.exe (Local Security Authority Subsystem)WinLogon.exe通過(guò)該進(jìn)程驗(yàn)證用戶登錄, 登錄后產(chǎn)生安全訪問(wèn)令牌對(duì)象, 通過(guò)該令牌創(chuàng)建Explorer.exe, 我們其他用戶進(jìn)程都由Explorer.exe啟動(dòng),并且繼承了該令牌權(quán)限。Services.exe該進(jìn)程簡(jiǎn)稱為SCM (NT Service Control Manager), 該進(jìn)程負(fù)責(zé)啟動(dòng)用戶態(tài)一些特殊進(jìn)程, 也就是我們通常所說(shuō)的服務(wù)程序。用戶模式調(diào)用內(nèi)核模式方式
由用戶模式調(diào)用內(nèi)核模式一般有2種方式 系統(tǒng)調(diào)用(system call) 和 IOCTL (IO Control Commands)
內(nèi)核模式調(diào)用用戶模式方式可以通過(guò)IOCTL的上下文傳遞, 也可以通過(guò)APC (Asynchronous Procedure Call)直接調(diào)用。進(jìn)程間通訊方式另外一種非常強(qiáng)大的用戶模式與內(nèi)核模式通訊方式, 同時(shí)也支持進(jìn)程間通訊, 該方式就是ALPC (Advanced Local Procedure Call), 該方式被操作系統(tǒng)大量使用, WinRT中的Broker進(jìn)程也用到了它 。該方式實(shí)際上就4個(gè)核心函數(shù):nt!NtAlpcSendWaitReceivePort, nt!NtAlpcCreatePort, nt!NtAlpcConnectPort, Nt!AplcAcceptConnectPort, 大概原理如下:
總結(jié)一下 ,通過(guò)上面Windows系統(tǒng)中一些關(guān)鍵概念的介紹, 加深我們對(duì)Windows系統(tǒng)的理解, 讓我們對(duì)應(yīng)用開發(fā)全局性的把握。
posted on 2013-01-12 22:03
Richard Wei 閱讀(8602)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
windows desktop