Windows内核编程学习1:构建HelloWorld
附本章需要資源:VS+SDK+WDK+InstDrv+DbgView-系統安全文檔類資源-CSDN下載
首先下載VS+WDK,資源可以從微軟上下,我這里資源也附在后面,但不是最新的。
今天我們開始第一個項目:HelloWorld
(我用的是VS2019)打開VS,[創建新項目]=>[Kernel Mode Driver Empty],再填寫名稱:HelloWorld
進入項目后,右擊“解決方案管理器”中的“Source Files”,“添加”,“新建項”,不要選擇上面的任何項目,直接在“名稱”中填寫“main.c”,然后在“main.c”里寫入以下C語言代碼:
#include <ntddk.h>VOID DriverUnload(PDRIVER_OBJECT driver) {DbgPrint("HW: Our driver is unloading...\r\n"); } NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path) {DbgPrint("HW: Hello, World!\r\n");driver->DriverUnload = DriverUnload;return STATUS_SUCCESS; }保存項目。然后根據你的系統版本,在菜單欄中選擇“x86”“x64”“ARM”或“ARM64”。
接著開始生成解決方案了。菜單欄中“生成”=>“生成解決方案”。
接下來有些人會遇到要添加Spectre緩解庫的情況,可以從開始菜單里打開“Visual Studio 2019 Installer”,進行修改。修改完后重新生成。
還有個問題。VS會提示代碼中有錯誤,原因在于driver與reg_path沒用到過,可以改成下面的樣子:(也就是自己給自己賦值了一下)
#include <ntddk.h>VOID DriverUnload(PDRIVER_OBJECT driver) {DbgPrint("HW: Our driver is unloading...\r\n");driver = driver; } NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path) {DbgPrint("HW: Hello, World!\r\n");reg_path = reg_path;driver->DriverUnload = DriverUnload;return STATUS_SUCCESS; }生成完畢后,就是運行項目了。這時候你到項目文件夾下會找到一個“.sys”的文件,因為我們這里項目名稱叫HelloWorld,所以文件名為“HelloWorld.sys”。怎么運行呢?因為Windows內核程序不同于普通的應用程序,你也不要指望它會彈出個窗口,所以只能用`DbgPrint`,也就是調試輸出,來查看它的狀態。輸出內容可以用DbgView軟件查看——接下來介紹如何查看`DbgPrint`的內容。
先安裝驅動程序。我這里用的InstDrv,資源附在后面。
打開InstDrv.exe,把HelloWorld.sys拖到輸入框上,會自動輸入文件路徑。接下來先不忙安裝啟動,我們打開DbgView.exe,把菜單欄中“監視”欄中除了“啟動日志”以外都勾上,接下來會出現一堆監視輸出信息,不管它們,我們的程序還沒安裝呢。
但是啟動失敗了。為什么?因為沒有簽名。
打開測試模式,在測試模式下可以安裝啟動沒有簽名的驅動程序。Win+R,輸入cmd回車,在命令提示符中輸入`bcdedit /set testsigning on`打開測試模式,再重啟就行了。(同理,`bcdedit /set testsigning off`可以再重啟后關閉測試模式)
InstDrv中 安裝=>啟動? 程序,DbgView中會立刻出現調試信息(迅速一定要迅速!!!),我這里把我的給大家看看:
?同樣,“停止”之后,會有驅動程序卸載的信息:
?接下來可以卸載了。
今天的學習就結束了!感謝大家的閱讀!也歡迎大家提出問題!
總結
以上是生活随笔為你收集整理的Windows内核编程学习1:构建HelloWorld的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Maven 强制导入jar包
- 下一篇: 前端学习(497):布局之居中布局