寫在前面
此系列是本人一個字一個字碼出來的,包括示例和實驗截圖。由於系統內核的復雜性,故可能有錯誤或者不全面的地方,如有錯誤,歡迎批評指正,本教程將會長期更新。 如有好的建議,歡迎反饋。碼字不易,如果本篇文章有幫助你的,如有閑錢,可以打賞支持我的創作。如想轉載,請把我的轉載信息附在文章后面,並聲明我的個人信息和本人博客地址即可,但必須事先通知我。
你如果是從中間插過來看的,請仔細閱讀 羽夏看Win系統內核——簡述 ,方便學習本教程。
看此教程之前,問幾個問題,基礎知識儲備好了嗎?保護模式篇學會了嗎?練習做完了嗎?沒有的話就不要繼續了。
🔒 華麗的分割線 🔒
學完了保護模式,為什么要學習驅動篇呢?具體原因我會在下面進行詳細介紹,如下是本篇章的子目錄:
本篇子目錄
- 驅動篇——簡述(本篇將會介紹)
- 驅動篇——開發環境配置
- 驅動篇——內核編程基礎
- 驅動篇——內核空間與內核模塊
- 驅動篇——常規的0環與3環通信
- 驅動篇——總結與提升
- ¥ 驅動篇——項目源碼分析
簡述
什么是驅動?這應該是初學者看到這個名詞會提出的問題。設備驅動程序,簡稱驅動程序,是一個允許高層次電腦軟件與硬件交互的程序,這種程序創建了一個硬件與硬件,或硬件與軟件溝通的接口,經由主板上的總線或其它溝通子系統與硬件形成連接的機制,這樣的機制使得硬件設備上的資料交換成為可能。依據不同的計算機體系結構與操作系統差異平台,驅動程序經歷了8位、16位、32位、64位變遷,這是為了調和操作系統與驅動程序之間的依存關系,例如在Windows 3.11
的16位操作系統時代,大部分的驅動程序都是16位,到了32位的Windows XP
則使用32位驅動程序,利用微軟提供了Windows Driver Model
實現,也就是我們需要編寫的驅動。至於64位的Linux
或是Windows
平台上,就必須使用64位的驅動程序,利用WDM
與WDF
皆可實現64位驅動程序,我就不再贅述。
為什么學習驅動?學習驅動並不是為了開發一個應用,而是為了將程序運行到0環權限。我們將用驅動來實現我們不能在3環應用實現的功能。
有些人可能會疑問,我們不是可以通過門來提權實現做與驅動程序相同的操作嗎?的確如此,但門是從哪里來的。我們之前實驗都是通過WinDbg
來構造門的,如果不通過它來實現,怎么搞?還不是通過驅動搞?
好了,如果開發普通軟件的話我們需要一個IDE
,如果你是大牛通過記事本和命令行調用編譯器和鏈接器生成當我沒說,一般人是做不到這樣的。Windows
平台上常見的就是Visual Studio
,我們將用它進行驅動開發。我用的版本是2019,僅供參考。網上也有不少的各種各樣的配置方法。有自行安裝WDK7600
+ 配置文件,也用自己配置命令行來實現的。我們是通過最新WDK11
配合Visual Studio 2019
實現xp
驅動的開發與調試。