Windows驱动程序运行时函数的调用
編譯器廠商一般在發布其編譯器的時候,會連同運行時函數一同發布。Windows驅動程序不能再代碼中使用編譯器提供的運行時函數,因為大部分運行時函數是基于Win32 API實現的,由于Win 32 API運行在用戶模式(RIng3層),驅動程序運行在內核模式(RIng0層),運行在內核模式下的程序不能調用用戶模式下提供的API函數的。當然一些少部分的運行時函數并沒有調用Win32 API,我們依然可以再驅動程序中去使用它們,比如strcpy等。
Windows提供了內核態的運行時函數,我們應該盡量在驅動程序中使用這些函數。
現在探討內核程序和應用程序之間的本質區別。除了能用WDK編寫內核程序和閱讀一部分Windows的內核代碼之外,我們還需要了解它們的本質是什么,它們和我們熟悉的應用程序有什么區別。
???? Intel的x86處理器是通過Ring級別來進行訪問控制的,級別共分4層,從Ring0到Ring3(后面簡稱R0、R1、R2、R3)。R0層擁有最高的權限,R3層擁有最低的權限。按照Intel原有的構想,應用程序工作在R3層,只能訪問R3層的數據;操作系統工作在R0層,可以訪問所有層的數據;而其他驅動程序位于R1、R2層[多多關注www.hitidc.com],每一層只能訪問本層以及權限更低層的數據。
???? 這應該是很好的設計,這樣操作系統工作在最核心層,沒有其他代碼可以修改它;其他驅動程序工作在R1、R2層,有要求則向R0層調用,這樣可以有效保障操作系統的安全性。但現在的OS,包括Windows和Linux都沒有采用4層權限,而只是使用2層——R0層和R3層,分別來存放操作系統數據和應用程序數據,從而導致一旦驅動加載了,就運行在R0層,就擁有了和操作系統同樣的權限,可以做任何事情,而所謂的rootkit也就隨之而生了。
???? rootkit在字面上來理解,是擁有“根權限”的工具。實際上,所有的內核代碼都擁有根權限,當然,并不一定它們都叫做rootkit,這要看你用它來做什么。用rootkit技術開發的木馬和病毒正在迅速發展,它們往往極難清除,以往殺毒軟件可以輕松清除掉系統中病毒的時代似乎已經一去不復返了。
總結
以上是生活随笔為你收集整理的Windows驱动程序运行时函数的调用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenTSDB 安装
- 下一篇: Windows下安装Vim插件管理Vun