理解Windows核心模式與使用者模式
核心層次架構
windows程式執行分為核心模式和使用者模式,核心模式可以訪問所有的記憶體地址空間, 並且可以訪問所有的CPU指令。一般程式執行在使用者模式, 通過系統呼叫切換到核心模式執行系統功能,Windows系統通過這種方式來確保系統的安全和穩定。
下面是核心的層次劃分:
硬體抽象層(Hardware Abstraction Layer) (HAL) (hal.dll)
最底層隔離硬體的, 底層的第三方驅動程式就執行在這層。
核心 (Kernel)
實現作業系統的一些底層服務,比如執行緒排程, 多處理器的同步,中斷/異常處理等。
執行體 (Executive)
實現基本的作業系統服務,比如基本的執行緒程式管理,記憶體管理, IO及程式間通訊等。
視窗圖形子系統(Windows Graphics Subsystem)
由win32K.sys在核心層實現, 使用者介面相關都依賴該層, User32.dll的大部分功能都由該層實現。
使用者層關鍵程式
Windows系統在使用者層有幾個關鍵的系統程式:
Smss.exe (session manager Subsystem)
關於Session的概念可以參考我的這篇Sessions, Window Stations
and Desktops, 在作業系統啟動時會建立一個不與任何Session關聯的Smss.exe管理者例項, 然後當有使用者登入時它會為每個Sessin拷貝一份與之關聯的Smss.exe例項,然後由該關聯的Smss.exe例項啟動winlogon.exe和csrss.exe.
WinLogon.exe
該程式管理使用者的登入和登出, 我們按Ctrl+Alt+Del出現的介面和登入後出現的桌面視窗都是由它啟動的。
Csrss.exe ( Client/Server Runtime Subsystem)
我們可以看到我們的桌面視窗(GetDesktopWindow)是由該程式建立的, 該程式主要負責Win32子系統的使用者模式部分(核心模式部分由win32k.sys實現)。
Lsass.exe (Local Security Authority Subsystem)
WinLogon.exe通過該程式驗證使用者登入, 登入後產生安全訪問令牌物件, 通過該令牌建立Explorer.exe, 我們其他使用者程式都由Explorer.exe啟動,並且繼承了該令牌許可權。
Services.exe
該程式簡稱為SCM (NT Service Control Manager), 該程式負責啟動使用者態一些特殊程式, 也就是我們通常所說的服務程式。
使用者模式呼叫核心模式方式
由使用者模式呼叫核心模式一般有2種方式 系統呼叫(system call) 和 IOCTL (IO Control Commands)
核心模式呼叫使用者模式方式
可以通過IOCTL的上下文傳遞, 也可以通過APC (Asynchronous Procedure Call)直接呼叫。
程式間通訊方式
另外一種非常強大的使用者模式與核心模式通訊方式, 同時也支援程式間通訊, 該方式就是ALPC (Advanced Local Procedure Call), 該方式被作業系統大量使用, WinRT中的Broker程式也用到了它 。
該方式實際上就4個核心函式:nt!NtAlpcSendWaitReceivePort, nt!NtAlpcCreatePort, nt!NtAlpcConnectPort, Nt!AplcAcceptConnectPort, 大概原理如下:
總結一下 ,通過上面Windows系統中一些關鍵概念的介紹, 加深我們對Windows系統的理解, 讓我們對應用開發全域性性的把握。
http://www.cnblogs.com/weiym/archive/2013/01/12/2858006.html
相關文章
- JAVA設計模式 3【建立型】理解工廠模式與抽象工廠模式Java設計模式抽象
- JAVA設計模式 1 設計模式介紹、單例模式的理解與使用Java設計模式單例
- Reactor模式理解React模式
- JAVA設計模式 5【結構型】代理模式的理解與使用Java設計模式
- 深入理解[Future模式]原理與技術模式
- GoF23種(部分)軟體設計模式【核心理解】Go設計模式
- JAVA設計模式 2【建立型】原型模式的理解與使用、理解淺克隆和深克隆Java設計模式原型
- 理解設計模式設計模式
- 設計模式理解設計模式
- 理解設計模式之單例模式(Javascript)設計模式單例JavaScript
- Android理解設計模式之組合模式、迭代器模式、訪問者模式Android設計模式
- 工廠模式(簡單工廠模式)快速理解模式
- PHP 單例模式理解PHP單例模式
- PHP單例模式理解PHP單例模式
- 深入理解代理模式模式
- 如何理解單例模式?單例模式
- 策略模式與模板方法模式模式
- J2EE 核心模式模式
- 核心領域模式 -Nick Tune模式
- IL角度理解for 與foreach的區別——迭代器模式模式
- 深入理解[觀察者模式]原理與技術模式
- JAVA設計模式 4【建立型】理解建造者模式Java設計模式
- 達夢資料庫使用者與模式管理資料庫模式
- 委派模式與策略模式記錄模式
- 在JavaScript中理解策略模式JavaScript模式
- 深入理解工廠模式模式
- 深入理解單例模式單例模式
- 建立型模式之單例模式與工廠模式(一)模式單例
- 三種工廠模式與策略模式模式
- 策略模式、策略模式與Spring的碰撞模式Spring
- 設計模式:策略模式,Java集合定製排序的核心思想設計模式Java排序
- Javascript策略模式理解以及應用JavaScript模式
- MVC設計模式深入理解MVC設計模式
- 狀態模式的理解和示例模式
- 代理模式-靜態代理解讀模式
- 3種代理模式-理解Spring Aop模式Spring
- 設計模式個人理解(一)設計模式
- 代理模式與Kotlin中的委託模式模式Kotlin
- JavaScript設計模式與實踐--代理模式JavaScript設計模式