小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Windows內(nèi)核之系統(tǒng)架構(gòu)

 芥子c1yw3tb42g 2024-07-23

一.架構(gòu)概述

下圖顯示了Windows的基本結(jié)構(gòu)。Windows采用雙模式來保護(hù)操作系統(tǒng)本身,以避免被應(yīng)用程序的錯(cuò)誤所波及。操作系統(tǒng)核心運(yùn)行在內(nèi)核模式下,應(yīng)用程序的代碼運(yùn)行在用戶模式下。每當(dāng)應(yīng)用程序需要用到系統(tǒng)內(nèi)核或內(nèi)核的擴(kuò)展模塊(內(nèi)核驅(qū)動(dòng)程序)所提供的服務(wù)時(shí),應(yīng)用程序通過硬件指令從用戶模式切換到內(nèi)核模式中;當(dāng)系統(tǒng)內(nèi)核完成了所請求的服務(wù)以后,控制權(quán)又回到了用戶模式代碼。

在Windows中,用戶代碼和內(nèi)核代碼有各自的運(yùn)行環(huán)境,而且它們可以訪問的內(nèi)存空間也不相同。在32位系統(tǒng)中,內(nèi)核代碼可以訪問當(dāng)前進(jìn)程的整個(gè)4GB虛擬地址空間,而用戶代碼只能訪問低端的2GB虛擬地址(或3GB,如果打開了內(nèi)核啟動(dòng)開關(guān)/3GB的話)。

不同的模塊工作在不同的模式下提供不同的服務(wù),一些重要的組件及工作模式如下表:

文件名組件模式
Ntoskrnl.exe經(jīng)典32位分頁模式下的執(zhí)行體和內(nèi)核內(nèi)核
Ntkrnlpa.exePAE分頁模式下的執(zhí)行體和內(nèi)核內(nèi)核
Hal.dll硬件抽象層內(nèi)核
PCI.sys,Win32k.sys內(nèi)核態(tài)驅(qū)動(dòng)程序內(nèi)核
Ntdll.dll內(nèi)部支持函數(shù)和執(zhí)行體函數(shù)的存根函數(shù)用戶
Kernel32.dll,Advapi32.dll,User32.dll,GDI32.dll等DLL核心的Win32子系統(tǒng)DLL用戶
Smss.exe,WinLogon.exe,Lass.exe等系統(tǒng)進(jìn)程用戶
Csrss.exe,PSXSS.exe,OS2SS.exe等子系統(tǒng)進(jìn)程用戶
Winspool.drv,UMDF等用戶態(tài)驅(qū)動(dòng)程序用戶
Explorer.exeShell進(jìn)程用戶
Svchost.exe系統(tǒng)服務(wù)進(jìn)程用戶
Notepad.exe等應(yīng)用程序用戶

二.內(nèi)核模式

簡單來說,內(nèi)核空間就是供操作系統(tǒng)內(nèi)核使用的內(nèi)存空間。內(nèi)核的核心任務(wù)是管理硬件資源,為上層提供服務(wù)。對下要面對五花八門的硬件,內(nèi)核的復(fù)雜程度可想而知。為了降低復(fù)雜度和便于開發(fā)維護(hù),內(nèi)核代碼也是模塊化的,按照職能分成若干個(gè)部分,相互協(xié)作。從這個(gè)角度來說,內(nèi)核空間中,出了狹義的內(nèi)核模塊(操作系統(tǒng)核心之核心),還有一些其他模塊。具體如下圖所示:

1.硬件抽象層(HAL)

HAL的功能在Hal.dll中實(shí)現(xiàn),該模塊的主要作用就是隔離硬件的差異性,使內(nèi)核和頂層模塊可以通過統(tǒng)一的方式來訪問硬件。值得說明的是,HAL負(fù)責(zé)的硬件類型只限于CPU架構(gòu)層面的核心硬件,比如中斷控制器,固件接口等,HAL并不負(fù)責(zé)外設(shè)類型的硬件,外設(shè)硬件的差異性問題是通過I/O管理器加載不同的設(shè)備驅(qū)動(dòng)程序來解決的。

為了適應(yīng)不同的硬件平臺(tái),硬件抽象層模塊有多個(gè)不同的版本。

版本作用
hal.dll支持標(biāo)準(zhǔn)平臺(tái)
halacpi.dll支持符合ACPI標(biāo)準(zhǔn)的硬件平臺(tái)
halapic.dll支持APIC(高級可編程中斷控制器)的硬件平臺(tái)
halaacpi.dll同時(shí)支持ACPI和APIC的硬件平臺(tái)
halmps.dll系統(tǒng)中有一個(gè)多處理器
halmacpi.dll支持ACPI的多處理器系統(tǒng)

當(dāng)安裝Windows系統(tǒng)時(shí),安裝程序會(huì)根據(jù)檢測到的情況選擇一個(gè)合適的hal文件,復(fù)制到系統(tǒng)目錄中。

2.執(zhí)行體和內(nèi)核

從文件角度看,內(nèi)核和執(zhí)行體都位于同一文件中,即通常所說的NT內(nèi)核文件。NT內(nèi)核文件有幾種版本,它們是使用同一套源代碼通過不同的編譯選項(xiàng)而編譯出來的。

  • 針對單處理器系統(tǒng)優(yōu)化的單處理器版本,在64位的Windows系統(tǒng)中,它的原始文件名為ntoskrnl.exe;在32位的Windows系統(tǒng)中,根據(jù)是否支持物理擴(kuò)展(PAE),它是原始文件名是ntkrnlpa.exe(支持PAE)或ntoskrnl.exe(不支持PAE)。

  • 可用于多處理器系統(tǒng)的多處理版本,在64位的Windows系統(tǒng)中,它的原始文件名為ntkrnlmp.exe;在32位的Windows系統(tǒng)中,支持PAE的版本的原始文件名是ntkrpamp.exe,不支持PAE版本的是ntkrnlmp.exe。

為了根據(jù)需要加載正確的版本,安裝程序在安裝時(shí)會(huì)根據(jù)系統(tǒng)中的處理器個(gè)數(shù),選擇單處理器版本或多處理器版本中的一個(gè)并復(fù)制到用戶系統(tǒng)(system32)目錄中。如果復(fù)制的是多處理器版本,那么會(huì)將其改為與單處理器版本相同的名字。這也就是上面強(qiáng)調(diào)的“原始文件名”的原因,它是相對于安裝在用戶系統(tǒng)中的文件名而言的。

在32位系統(tǒng)中,由于可以在啟動(dòng)選項(xiàng)中自由選擇是否開起PAE,所以安裝程序會(huì)將支持PAE的版本和不支持PAE的版本都復(fù)制到用戶系統(tǒng)(system32)目錄中,但是會(huì)根據(jù)上面的原則選擇多處理器版本和單處理器版本中的一種,并將其改為單處理器版本名字。因此,在安裝好的Windows系統(tǒng)中就會(huì)看到ntoskrnl.exe和ntkrnlpa.exe兩個(gè)NT內(nèi)核文件。在Windows系統(tǒng)啟動(dòng)過程中,系統(tǒng)加載程序(NTLDR或WinLoad)會(huì)根據(jù)啟動(dòng)選擇中是否啟用了PAE加載其中一個(gè)。

在64位內(nèi)核中,CPU大多基于AMD64或Intel64的x64架構(gòu),x64可以看作是對PAE的一種擴(kuò)展(頁表由3級擴(kuò)展到4級,支持更長的線性地址和物理地址)。這就意味著,運(yùn)行在x64硬件上的64位內(nèi)核都是'PAE'版本的,不再有非PAE版本,因此在這也的系統(tǒng)中,system32目錄中只有一個(gè)內(nèi)核文件,而且沒有必要提是否是PAE版本了。

想要查看NT內(nèi)核文件的原始文件名,只需要右擊文件,選擇'屬性',在彈出的對話框中單擊'詳細(xì)信息'選項(xiàng)卡中的'原始文件名',就可以看到內(nèi)核文件的原始文件名

另外,由PE工具可以看到,有6個(gè)模塊被內(nèi)核模塊直接導(dǎo)入使用

A.執(zhí)行體

Windows執(zhí)行體是Ntoskrnl.exe的上層,包含操作系統(tǒng)的基礎(chǔ)服務(wù),例如線程調(diào)度,進(jìn)程和線程管理,安全性,I/O,網(wǎng)絡(luò)以及進(jìn)程間的通信。它的作用就是幫助內(nèi)核行駛(執(zhí)行)某一方面的職能,比如內(nèi)存管理器負(fù)責(zé)管理和分配內(nèi)存資源,進(jìn)程管理器負(fù)責(zé)管理系統(tǒng)中的所有進(jìn)程,輸入輸出(I/O)管理器負(fù)責(zé)協(xié)調(diào)系統(tǒng)的硬件資源等待。如果把操作系統(tǒng)內(nèi)核比喻程系統(tǒng)的最高權(quán)力機(jī)構(gòu),那么執(zhí)行體便是它的一個(gè)個(gè)職能部門,負(fù)責(zé)各方面的事務(wù)。為了完成這些事務(wù),執(zhí)行體提供了下列類型的函數(shù)

類型說明
可在用戶模式下導(dǎo)出和調(diào)用的函數(shù)這些函數(shù)叫系統(tǒng)服務(wù),可通過Ntdll.dll導(dǎo)出。大部分此類服務(wù)均可通過Windows API或其他環(huán)境子系統(tǒng)的API訪問。然而也有少數(shù)服務(wù)無法通過任何文檔化的子系統(tǒng)函數(shù)訪問,例如ALPC和多種查詢函數(shù)(如NtQueryInformationProcess),以及一些專用函數(shù)(如NtCreatePagingFile等)。
通過DeviceIoControl調(diào)用的設(shè)備驅(qū)動(dòng)程序函數(shù)這為從用戶模式到內(nèi)核模式調(diào)用設(shè)備驅(qū)動(dòng)程序中的函數(shù)提供了通用接口,借此可調(diào)用讀/寫操作無關(guān)的函數(shù)
只能從內(nèi)核模式調(diào)用,并在WRK中導(dǎo)出且未文檔化的函數(shù)這些函數(shù)包括多種支持例程,如I/O管理器(以Io開頭),常規(guī)執(zhí)行體函數(shù)(Ex)等,主要適用于設(shè)備驅(qū)動(dòng)程序的開發(fā)者
定義為全局符號但不可導(dǎo)出的函數(shù)這些函數(shù)包括在Ntoskrnl.exe中內(nèi)部調(diào)用的支持函數(shù),例如以Iop(內(nèi)部I/O管理器支持函數(shù))或Mi(內(nèi)部內(nèi)存管理支持函數(shù))開頭的函數(shù)
位于模塊內(nèi)部但未定義為全局符號的函數(shù)這些函數(shù)為執(zhí)行體和內(nèi)核專用

B.Windows內(nèi)核

操作系統(tǒng)內(nèi)核包含底層操作系統(tǒng)函數(shù),負(fù)責(zé)線程調(diào)度,中斷處理,異常分發(fā),多處理器同步等關(guān)鍵任務(wù),是操作系統(tǒng)最核心的部分,我們將其稱為微觀意義的內(nèi)核。內(nèi)核提供了一系列的例程和基本對象,執(zhí)行體和其他部分會(huì)使用它們實(shí)現(xiàn)更高層次的功能。

內(nèi)核由Ntoskrnl.exe中一系列用于提供基礎(chǔ)機(jī)制的函數(shù)組成,例如被執(zhí)行體使用的線程調(diào)度和同步服務(wù),以及與底層硬件架構(gòu)獨(dú)立的支持(例如每種處理器架構(gòu)均各異的中斷和執(zhí)行調(diào)度)。內(nèi)核代碼主要用C語言編寫,不過對于需要使用特殊處理器指令和寄存器的任務(wù),由于難以用C語言代碼訪問,因此繼續(xù)使用了匯編代碼。

與前文提到的各自執(zhí)行體支持函數(shù)類似,很多內(nèi)核函數(shù)均在WDK中提供了文檔('Ke'開頭的函數(shù)),因?yàn)樵O(shè)備驅(qū)動(dòng)程序的實(shí)現(xiàn)也需要它們。

3.空閑進(jìn)程和系統(tǒng)進(jìn)程

在內(nèi)核模式中包含了兩個(gè)特殊的進(jìn)程,分別是空閑進(jìn)程和系統(tǒng)進(jìn)程。之所以說它們特殊,是因?yàn)檫@兩個(gè)進(jìn)程都具有如下特征。

  1. 普通的Windows進(jìn)程都是通過CreateProcess或類似的API并指定一個(gè)可執(zhí)行映像文件而創(chuàng)建的,但這兩個(gè)進(jìn)程不是,它們沒有對應(yīng)的磁盤映像文件,是在系統(tǒng)啟動(dòng)時(shí)“捏造”出來的。

  2. 普通的Windows進(jìn)程都有用戶空間和內(nèi)核空間兩個(gè)部分,但是這兩個(gè)進(jìn)程都只有內(nèi)核空間,沒有用戶空間。或者說,這兩個(gè)進(jìn)程只在高特權(quán)級的內(nèi)核空間中運(yùn)行。

  3. 具有固定的進(jìn)程ID,空閑進(jìn)程的ID總是0,系統(tǒng)進(jìn)程的ID總是4。

A.空閑進(jìn)程

空閑進(jìn)程也叫Idle進(jìn)程,是空閑線程的載體。由于當(dāng)CPU一旦加電工作以后,就會(huì)不斷的取指令并執(zhí)行指令,如果當(dāng)前系統(tǒng)中并沒有需要運(yùn)行的線程,就需要給CPU一些指令,組成循環(huán),讓它在那里空轉(zhuǎn)。所以,今天的操作系統(tǒng)中,都會(huì)設(shè)計(jì)Idle進(jìn)程,Idle進(jìn)程負(fù)責(zé)占用CPU的閑置時(shí)間,當(dāng)CPU空閑的時(shí)候,就讓它執(zhí)行空閑線程。

由于每個(gè)CPU都需要空閑線程,所以空閑線程的個(gè)數(shù)就是系統(tǒng)中啟用的處理器的個(gè)數(shù),比如下面這張圖可以看出該電腦的空閑線程有4個(gè),那么CPU個(gè)數(shù)就是4。另外,空閑線程占用CPU的比例越高越好,因?yàn)榇藭r(shí)說明CPU可以對程序有更快的響應(yīng)。

在NT內(nèi)核啟動(dòng)時(shí),就會(huì)創(chuàng)建空閑進(jìn)程。更準(zhǔn)確的說,是在執(zhí)行體的階段0初始化時(shí),進(jìn)程管理器的初始化函數(shù)便會(huì)創(chuàng)建空間進(jìn)程和第一個(gè)空閑線程。可以說,第一個(gè)空閑線程是從系統(tǒng)初始啟動(dòng)線程“蛻化”而來的,是系統(tǒng)中的第一個(gè)線程。

B.系統(tǒng)進(jìn)程

在系統(tǒng)啟動(dòng)階段,進(jìn)程管理器在創(chuàng)建空閑進(jìn)程后,便創(chuàng)建系統(tǒng)進(jìn)程,因此,系統(tǒng)進(jìn)程是系統(tǒng)創(chuàng)建的第二個(gè)進(jìn)程,它的進(jìn)程ID為4,父進(jìn)程ID是0,即空閑進(jìn)程。系統(tǒng)進(jìn)程的映像文件名是System,這個(gè)名稱是杜撰的,磁盤上并不存在System.exe。

系統(tǒng)進(jìn)程是一類運(yùn)行在內(nèi)核模式下的特殊線程的主體,這種特殊線程也叫做內(nèi)核模式系統(tǒng)線程,其作用是為操作系統(tǒng)提供獨(dú)立的進(jìn)程空間和進(jìn)程對象。系統(tǒng)線程具備普通用戶線程所擁有的屬性和上下文,例如硬件上下文和優(yōu)先級等,但與普通用戶模式線程不同之處在于,它只能在內(nèi)核模式下運(yùn)行,進(jìn)而執(zhí)行系統(tǒng)空間加載的代碼。這些代碼可能來自Ntoskrnl.exe或其他已加載的設(shè)備驅(qū)動(dòng)程序。此外,系統(tǒng)進(jìn)程的PEB為0,在用戶空間的運(yùn)行時(shí)間也是0,這是因?yàn)樗]有用戶空間。因此,系統(tǒng)線程不具備用戶進(jìn)程地址空間,任何動(dòng)態(tài)存儲(chǔ)都必須從操作系統(tǒng)內(nèi)存堆(例如換頁或非換頁內(nèi)存)中分配。

系統(tǒng)線程是由PsCreateSystemThread或IoCreateSystemThread函數(shù)創(chuàng)建的,這兩個(gè)函數(shù)都在WDK中有相關(guān)文檔。這些線程只能在內(nèi)核模式調(diào)用。Windows及各種設(shè)備驅(qū)動(dòng)會(huì)在系統(tǒng)初始化過程中創(chuàng)建系統(tǒng)線程,借此執(zhí)行需要線程上下文的操作,例如發(fā)起和等待I/O或其他對象,查詢對象。例如,內(nèi)存管理器會(huì)使用系統(tǒng)線程實(shí)現(xiàn)諸如將臟頁面寫入頁面文件或映像文件中,將進(jìn)程換出/換入內(nèi)存等操作;內(nèi)核會(huì)創(chuàng)建一個(gè)名為平衡機(jī)管理器的系統(tǒng)線程,該線程每秒被喚醒一次,從而有可能發(fā)起各種與調(diào)度和內(nèi)存管理有關(guān)的事件;緩存管理器也會(huì)使用系統(tǒng)線程實(shí)現(xiàn)預(yù)讀取和滯后寫入的I/O;文件服務(wù)器設(shè)備驅(qū)動(dòng)(Srv2.sys)會(huì)使用系統(tǒng)線程響應(yīng)網(wǎng)絡(luò)I/O請求,并將共享磁盤分區(qū)中的文件數(shù)據(jù)傳輸?shù)骄W(wǎng)絡(luò);甚至軟盤驅(qū)動(dòng)器也會(huì)使用系統(tǒng)線程查詢軟盤設(shè)備。

默認(rèn)情況下,系統(tǒng)線程屬于System進(jìn)程的,但設(shè)備驅(qū)動(dòng)程序可以在任何進(jìn)程中創(chuàng)建系統(tǒng)線程。例如,Windows子系統(tǒng)設(shè)備驅(qū)動(dòng)(Win32k.sys)可以在Windows子系統(tǒng)進(jìn)程(Csrss.exe)的規(guī)范顯式驅(qū)動(dòng)程序(Cdd.dll)中創(chuàng)建一個(gè)系統(tǒng)線程,這也就可以輕松訪問該進(jìn)程在用戶模式地址空間中的數(shù)據(jù)。

4.內(nèi)核空間的其他模塊

除了上面的內(nèi)容,內(nèi)核空間中還存在以下的這些模塊,不同的模塊有著不同的分工。

模塊名作用
Win32k.sysWindows子系統(tǒng)的內(nèi)核空間模塊,與用戶空間的CSRSS進(jìn)程互相配合一起管理窗口世界,包括窗口對象,用戶輸入,消息分發(fā),顯示輸出等。
DxgKrnl.sys管理GPU的核心模塊
KS.sys管理流媒體的核心模塊,使用圖的模式管理音視頻的編解碼和處理節(jié)點(diǎn),各個(gè)節(jié)點(diǎn)之間可以用引腳(pin)方式動(dòng)態(tài)建立連接
AFD.sys網(wǎng)絡(luò)套接字(WinSock)的內(nèi)核空間接口驅(qū)動(dòng),與硬件廠商的網(wǎng)卡驅(qū)動(dòng)配合一起管理網(wǎng)卡設(shè)備
Wfplwf.sys用于管理網(wǎng)絡(luò)過濾驅(qū)動(dòng)的核心模塊,全稱為Windows過濾平臺(tái)輕量過濾驅(qū)動(dòng)驅(qū)動(dòng)
ACPI.sys負(fù)責(zé)與平臺(tái)固件接口的內(nèi)核模塊,是用于支持高級配置和電源接口編制的核心驅(qū)動(dòng)程序,其內(nèi)部除了包含用于解釋執(zhí)行ACPI源語言腳本的解釋器,還包含一些ACPI標(biāo)準(zhǔn)設(shè)備的驅(qū)動(dòng)程序,比如電源開關(guān),筆記本電腦蓋板檢測器,風(fēng)扇等
PCI.sys是PCI總線的核心驅(qū)動(dòng)程序,用于支持PCI總線標(biāo)準(zhǔn),枚舉和管理PCI總線上的設(shè)備。每當(dāng)發(fā)現(xiàn)新的設(shè)備后,便嘗試讓即插即用管理器為其加載驅(qū)動(dòng)程序,加載的驅(qū)動(dòng)程序可能是Windows系統(tǒng)自帶的,也可能是從硬件廠商那里獲得和后來安裝的。
NTFS.sys是NTFS文件系統(tǒng)的實(shí)現(xiàn),用于訪問NTFS格式的磁盤卷

三.用戶空間

用戶空間是應(yīng)用程序代碼和各種用戶態(tài)運(yùn)行的內(nèi)存空間。所謂應(yīng)用程序,就是實(shí)現(xiàn)某一方法應(yīng)用的軟件程序,比如辦公軟件,瀏覽器,即時(shí)通信程序等。用戶空間的各個(gè)模塊具體如下圖

可以看到,除了用戶安裝的或者系統(tǒng)預(yù)裝的普通應(yīng)用程序,用戶空間中還運(yùn)行著操作系統(tǒng)的一些進(jìn)程,一般將它們稱為常規(guī)進(jìn)程。從職能角度看,常規(guī)進(jìn)程的角色和內(nèi)核空間的執(zhí)行體有些類似,它們分別負(fù)責(zé)某一方面的職能,幫助內(nèi)核一起維護(hù)系統(tǒng)的秩序。

1.Ntdll.dll

Ntdll.dll是一個(gè)特殊的系統(tǒng)支持庫,主要被子系統(tǒng)DLL和原生應(yīng)用程序使用,用戶空間的代碼通過這個(gè)DLL來進(jìn)入系統(tǒng)空間使用內(nèi)核提供的各種服務(wù)。同時(shí),Ntdll.dll也是操作系統(tǒng)內(nèi)核在用戶空間中的“代理”,系統(tǒng)會(huì)在啟動(dòng)階段便把它加載到內(nèi)存中,并把它映射到所有用戶進(jìn)程的進(jìn)程空間中,而且映射在相同的虛擬地址中。當(dāng)內(nèi)核需要與用戶空間配合是,它會(huì)使用這個(gè)DLL中的函數(shù),因?yàn)橹挥羞@個(gè)DLL才存在于每個(gè)用戶進(jìn)程的用戶空間的固定位置上。

對于內(nèi)核的每一個(gè)系統(tǒng)服務(wù),該DLL都提供一個(gè)相應(yīng)的存根函數(shù),這些存根函數(shù)名稱以'Nt'作為前綴,例如NtCreateProcess,NtOpenFile和NtSetTimer。另外,ntdll.dll還提供了許多系統(tǒng)級的映像加載函數(shù)(以'Ldr'為前綴),Windows子系統(tǒng)進(jìn)程通信函數(shù)(以'Csr'為前綴),調(diào)試函數(shù)(以'Dbg'為前綴),系統(tǒng)事件函數(shù)(以'Etw'為前綴),以及一般的運(yùn)行支持函數(shù)(以'Rtl'為前綴)和字符串支持函數(shù)等。

2.環(huán)境子系統(tǒng)

為了能夠在Windows系統(tǒng)上運(yùn)行多種類型的應(yīng)用軟件,Windows設(shè)計(jì)者在定義Windows架構(gòu)時(shí)便設(shè)計(jì)了環(huán)境子系統(tǒng)的概念。不同類型的應(yīng)用程序運(yùn)行在不同的環(huán)境子系統(tǒng)。Windows2000支持如下三種環(huán)境子系統(tǒng):

  • POSIX子系統(tǒng):用于運(yùn)行符合POSIX標(biāo)準(zhǔn)的程序。系統(tǒng)目錄(system32)下的PSXSS.EXE和PSXDLL.DLL是POSIX子系統(tǒng)的核心文件。

  • OS/2子系統(tǒng):支持16位的OS/2程序,系統(tǒng)目錄下的OS2.EXE,OS2SRV.EXE和OS2SS.EXE是OS/2子系統(tǒng)的核心文件。

  • Windows子系統(tǒng):即支持Windows程序運(yùn)行的子系統(tǒng),包括Windows子系統(tǒng)服務(wù)器進(jìn)程(CSRSS.EXE),子系統(tǒng)驅(qū)動(dòng)程序(Win32K.sys),子系統(tǒng)DLL(Kernel32.dll,User32.dll,Advapi32.dll,GDI32.dll),以及和設(shè)備相關(guān)的顯示和打印驅(qū)動(dòng)程序等

盡管Windows系統(tǒng)的基本設(shè)計(jì)思想是支持多個(gè)獨(dú)立的環(huán)境子系統(tǒng),但是為了避免多個(gè)子系統(tǒng)都重復(fù)實(shí)現(xiàn)類似的功能,Windows子系統(tǒng)有著與其他子系統(tǒng)不同的低位,Windows子系統(tǒng)可以獨(dú)立存在而且是系統(tǒng)中不可或缺的部分,其他子系統(tǒng)以Windows子系統(tǒng)為基礎(chǔ),必須依賴于Windows子系統(tǒng),而且按需要運(yùn)行(當(dāng)?shù)谝淮芜\(yùn)行相應(yīng)類型的應(yīng)用程序時(shí),才啟動(dòng)所需的子系統(tǒng))。

以下是Windows子系統(tǒng)的重要文件,大多數(shù)Windows API是由Windows子系統(tǒng)的DLL輸出的。

名稱模式描述
CSRSS.EXE用戶模式Windows子系統(tǒng)服務(wù)進(jìn)程的主程序
ADVAPI32.DLL用戶模式

Windows子系統(tǒng)的DLL之一,包含如下API的入口:

  • 數(shù)據(jù)加密(以Crpt開頭)

  • 用戶和賬號管理(以Lsa開頭)

  • 注冊表操作(以Reg開頭)

  • WMI(以Wmi開頭)

  • 終端服務(wù)(以Wts開頭)

GDI32.DLL用戶模式Windows子系統(tǒng)的DLL之一,包含各種圖形文字描繪API(GDI)的入口,如TextOut(),BitBlt()等。其中大多數(shù)API是被轉(zhuǎn)換為系統(tǒng)服務(wù)并發(fā)給內(nèi)核模式的Windows子系統(tǒng)驅(qū)動(dòng)程序(Win32K.sys)
KERNEL32.DLL用戶模式

Windows子系統(tǒng)的DLL之一,包含如下的API入口:

  • 進(jìn)程/線程管理,如CreateThread

  • 調(diào)試(以DeBug開頭)

  • 文件操作,包括創(chuàng)建,打開,讀寫,搜索等

  • 內(nèi)存分配(以Local開頭和Global開頭)

其中大多數(shù)API是被轉(zhuǎn)換為系統(tǒng)服務(wù)并發(fā)給內(nèi)核態(tài)的執(zhí)行體

USER32.DLL用戶模式Windows子系統(tǒng)的DLL之一,包含窗口管理,消息處理和用戶輸入API,如EndDialog,BeginPaint,SetWindowPos,MessageBox等。其中大多數(shù)API是被轉(zhuǎn)換為系統(tǒng)服務(wù)并發(fā)給內(nèi)核模式的Windows子系統(tǒng)驅(qū)動(dòng)程序(Win32k.sys)

3.常規(guī)進(jìn)程

在一個(gè)典型的Windows系統(tǒng)中,一般都運(yùn)行著以下這些常規(guī)進(jìn)程。

名稱作用
會(huì)話管理進(jìn)程(SMSS.EXE)它是系統(tǒng)中的第一個(gè)根據(jù)映像文件創(chuàng)建的進(jìn)程,是在系統(tǒng)啟動(dòng)后期由執(zhí)行體的初始化函數(shù)創(chuàng)建的。它運(yùn)行后,會(huì)加載和初始化Win32子系統(tǒng)的內(nèi)核模塊Win32K.sys,創(chuàng)建Win32子系統(tǒng)服務(wù)進(jìn)程(CSRSS.EXE),以及登錄進(jìn)程(WinLogon.exe)
Windows子系統(tǒng)服務(wù)器進(jìn)程(CSRSS.EXE)負(fù)責(zé)維護(hù)Windows子系統(tǒng)的“日常事務(wù)”,為子系統(tǒng)的各個(gè)進(jìn)程提供服務(wù)。例如登記進(jìn)程和線程,管理控制臺(tái)窗口,管理DOS程序虛擬機(jī)(VDM)進(jìn)程等。CSRSS是Client/Server Runtime Server Sybsystem的縮寫,即客戶端/服務(wù)器運(yùn)行時(shí)子系統(tǒng)
登錄進(jìn)程(WinLogon.EXE)負(fù)責(zé)用戶登錄和安全相關(guān)的事務(wù)。它啟動(dòng)后,會(huì)創(chuàng)建LSASS進(jìn)程和系統(tǒng)服務(wù)管理進(jìn)程(Services.EXE)。Windows XP的文件保護(hù)(WFP)功能也是在這個(gè)進(jìn)程中實(shí)現(xiàn)的(sfc.dll和sfc_os.dll)
本地安全和認(rèn)證進(jìn)程(LSASS.EXE)負(fù)責(zé)用戶身份驗(yàn)證
服務(wù)管理進(jìn)程(SERVICES.EXE)

負(fù)責(zé)啟動(dòng)和股那里系統(tǒng)服務(wù)程序。系統(tǒng)服務(wù)程序是按照NT系統(tǒng)服務(wù)規(guī)范編寫的EXE程序,通常沒有用戶界面,只在后臺(tái)運(yùn)行。常見的幾個(gè)系統(tǒng)服務(wù)如下:

  • SpoolSv.exe:打印機(jī)脫機(jī)服務(wù)

  • WmiPrvSE.exe:是WMI提供其管理服務(wù)

  • SvcHost.exe:通用的服務(wù)宿主程序

OS/2子系統(tǒng)和POSIX子系統(tǒng)服務(wù)進(jìn)程用于在Windows系統(tǒng)中運(yùn)行OS/2和符合POSIX標(biāo)準(zhǔn)的程序。它們只在需要時(shí)才啟動(dòng),在環(huán)境子系統(tǒng)部分將進(jìn)一步分析
外殼(Shell)程序默認(rèn)為Explorer.exe,負(fù)責(zé)顯示'開始'菜單,任務(wù)欄和桌面圖標(biāo)等

四.參考資料

  • 《軟件調(diào)試》(第二版)卷2:Windows平臺(tái)調(diào)試(上冊)

  • 《深入解析Windows操作系統(tǒng)》(第七版)(卷一)

  • 《Windows內(nèi)核原理與實(shí)現(xiàn)》

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多