驅動篇——開發環境配置


寫在前面

  此系列是本人一個字一個字碼出來的,包括示例和實驗截圖。由於系統內核的復雜性,故可能有錯誤或者不全面的地方,如有錯誤,歡迎批評指正,本教程將會長期更新。 如有好的建議,歡迎反饋。碼字不易,如果本篇文章有幫助你的,如有閑錢,可以打賞支持我的創作。如想轉載,請把我的轉載信息附在文章后面,並聲明我的個人信息和本人博客地址即可,但必須事先通知我

你如果是從中間插過來看的,請仔細閱讀 羽夏看Win系統內核——簡述 ,方便學習本教程。

  看此教程之前,問一個問題,你明確學驅動的目的了嗎? 沒有的話就不要繼續了,請重新學習 羽夏看Win系統內核——驅動篇 里面的內容。


🔒 華麗的分割線 🔒


開發環境配置

  Microsoft官方提供了指導,點擊 該鏈接 轉到官方指導頁面。
  怎么裝VSWindows 11 SDK我就不贅述了。注意,如果你沒有裝Windows 11 SDK,直接安裝Windows 11 WDK,驅動的關鍵頭文件你會沒有。
  接下來說一下怎么裝Windows 11 WDK,下載好后運行,你會看到如下情況:

  選擇好安裝目錄,點擊繼續,然后會到下圖所示情況,選中否,它會收集你的一些信息:

  最后按照正常操作就行了,最后會彈出安裝插件的窗體(忘了截圖了,和正常安裝VS插件一樣的窗體),點擊Modify。這個插件會提供一些編寫驅動的模板,這東西至關重要,幫我們減少了大量的配置人力。

  安裝好之后,我們進行一個測試。開啟VS,選擇新建項目,如果編寫在XP下面的驅動的話,注意選擇Empty WDM Driver,如下圖所示:

  后面就像正常新建項目一樣起個名字新建就行,你就會得到一個新的空項目。然后添加一個源文件,如下圖所示:

  為什么要用C,而不用C++呢?C++雖然更加強大,提供類的功能。但C更加簡單,對於我們來說就足夠了,除非你用其開發大型驅動程序。
  新建完畢后,我們用下面的代碼:

#include <ntddk.h>    //驅動程序必備頭文件

NTSTATUS UnloadDriver(PDRIVER_OBJECT DriverObject)
{
    DbgPrint("Chapter Driver By WingSummer,Unloaded Successfully!");
}

NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
{
    DbgPrint("Chapter Driver By WingSummer,Loaded Successfully!");
    DriverObject->DriverUnload = UnloadDriver;

    return STATUS_SUCCESS;
}

  DbgPrint意思是輸出調試信息,那我為什么要用英文而不用中文呢?因為中文在WinDbg進行源碼調試的時候,中文會亂碼,所以用英文更好些,但調試信息輸出的中文並不會亂碼。DriverEntry是驅動程序的入口,和正常的C語言程序的main函數是一樣的,只是入口的參數不一樣。其它的細節將會在下一篇進行講解,就把代碼復制到VS就行了。

  代碼寫好了,我們需要對工程進行配置,否則驅動XP用不了:

🚀 更改目標平台,否則XP報無效驅動程序 🚀

🚀 用不到,關掉它 🚀

🚀 用不到,關掉它 🚀

  設置好后,我們就可以編譯了。然而理想很美好,現實很殘酷。編譯失敗了:

  報錯說明需要緩解了Spectre漏洞的庫這個東西,不知道是干啥的。但我們必須安裝上,否則驅動編譯不了啊。好,啟動Visual Studio Installer,修改它,安裝如下圖所示文件:

  安裝好,重啟VS,打開原先我們建好的項目,繼續編譯,結果又報錯,不過錯誤不是原來的了:

  對於這個錯誤,我們只需要設置一個就可以解決,如下圖所示:

  設置完畢后,再編譯一下,編譯通過,成功生成了驅動文件。然后我們把它拖到虛擬機中,利用驅動加載工具來試一試驅動是否可用:

  發現DebugView正常顯示我們想要輸出的調試字符串,證明驅動正常工作。以上的配置過程也就完成了一半。

調試環境配置

  調試是十分重要的一個環節。那么我們如何進行調試呢?打開WinDbg的設置,需要添加你開發驅動的工程目錄,如下圖所示:

  這個添加的符號目錄因自己的開發驅動的位置而異,不要盲目把我的目錄給添加上。然后點擊確定。注意,更改需要調試器處於空閑非調試狀態才能設置。
  然后我們在上面的源代碼中,添加一個手動斷點,如下所示:

#include <ntddk.h>

NTSTATUS UnloadDriver(PDRIVER_OBJECT DriverObject)
{
    DbgPrint("Chapter Driver By WingSummer,Unloaded Successfully!");
}

NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
{
    DbgPrint("Chapter Driver By WingSummer,Loaded Successfully!");
    DriverObject->DriverUnload = UnloadDriver;
    _asm
    {
        int 3;
    }
    return STATUS_SUCCESS;
}

  再重新編譯,拖到虛擬機中進行注冊和運行,就會觸發這個斷點,WinDbg就會接管並自動彈出一個窗體用來顯示調試源代碼:

幫助文檔

  網上有最新版的WDK文檔,但文檔主要是針對Win10開發驅動的,有很多APIXP沒有的。請到 羽夏看Win系統內核——簡述 下載WDK幫助文檔。然后下載成功解壓,並運行Docs.msi安裝程序進行安裝即可。最后的幫助文檔效果如下圖所示:

  綜上,環境就配置完畢了,本文結束。

下一篇

  驅動篇——內核編程基礎


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM