VS2017 + Vmvare 除錯驅動
基礎:
- VS2017安裝成功
- wdk10
注意事項: 關閉 、主機 客戶機 防火牆 、 互相ping都能ping通。
一、具體操作步驟
工具安裝就不說了,不會的百度一下。只說一下一些關鍵的地方。 1、安裝好虛擬機器後,給虛擬機器增加一個串列埠裝置。具體操作見圖: 完成配置後虛擬機器裝置配置就多了一個串列埠的裝置。因為印表機用了埠1。所以裝置裡面顯示的是串列埠2(如果想設定成埠1,把印表機裝置刪了在新增串列埠裝置)。
2、配置虛擬機器系統為除錯模式
以管理員身份,在虛擬機器命令列模式下執行如下2個命令開啟。 bcdedit /debug on bcdedit /dbgsettings serial debugport:n baudrate:115200 where n is the number of a COM port on the virtual machine.(n時虛擬機器的一個COM埠號。就是裝置顯示的串列埠2,n就是埠2)。
3、把WDK10的虛擬機器除錯驅動拷貝到虛擬機器中安裝。 因為VS2017可以除錯x86 x64兩種驅動所以兩個都拷貝到虛擬機器安裝。也可以根據需要情況安裝(32位裡安裝x86版) 4、VS2017開發工具配置 在VS2017的選單欄點選DRIVER–TEST–CONFIGURE 如圖 配置介面,下面兩個選項第一項由VS2017幫我們建立一個WDKuser測試賬戶,自動開啟測試模式等。第二個是使用我們自己配置的引數。由於上面我們已經配置了串列埠引數 、設定了除錯模式所以我們選擇第二個就行了。 DESKTOP-1R835HV是虛擬機器裡安裝的作業系統的計算機名
如下配置在核心模式中,選擇串列埠、配置好波特率、勾上2個選項、管道名稱、埠號。
5、使用工具安裝除錯64位驅動
使用DebugView列印核心除錯資訊是開發驅動的非常重要的手段,但DebugView預設在WINDOWS 7和WINDOWS 10下卻無法獲取核心的除錯日誌,驅動呼叫KdPint/DbgPrint等的列印結果是無法被DebugView給捕捉到的。設定方法如下(複製下面的程式碼到txt檔案。改字尾為.reg後執行,然後重啟電腦):
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Debug Print Filter] “DEFAULT”=dword:0000000f 還有自己編譯出來的驅動要使用編譯的Debug版本來測試,Release版本是不會執行KdPrint/DbgPint函式的。
6、在VS2017中下斷點進行除錯 如果你第五部已經完成了,並且在DebugView中已經能夠輸出除錯的列印資訊了,辣麼騷年你已經離成功只有一部之遙了
建立一個驅動工程,WDK10提供的模板中根本沒有提供NT驅動模板,我們如何建立NT驅動呢? 解決:其實雖然沒有提供NT模板,但是我們可以建立WDM空模板工程,然後再自己新增檔案,編譯,得到的也就是NT驅動了。
驅動工程中會幫你建立一個inf檔案,NT是使用不到的,可以直接刪除。我們直接新增一個first.c
在檔案中新增測試程式碼。
#include <ntddk.h>
VOID DriverUnload(PDRIVER_OBJECT objDriver)
{
// 什麼也不做,只打印一行字串
DbgPrint("My Dirver is Ending...\r\n");
}
NTSTATUS DriverEntry(PDRIVER_OBJECT objDriver, PUNICODE_STRING strRegPath)
{
// 列印一行字串,並註冊驅動解除安裝函式,以便於驅動解除安裝
DbgPrint("My Dirver Is Starting!\r\n");
objDriver->DriverUnload = DriverUnload;
return STATUS_SUCCESS;
}
編譯,報錯,沒有關係,這些都是因為安全警告等級太高了,我們可以降低編譯器警告等級的方式解決: 如果編譯的時候還是出現錯誤 可以參照 我的另外一篇博文 https://blog.csdn.net/qq_21763381/article/details/83210572 辣麼現在我們開始附加虛擬機器的核心進行除錯了。 首先把虛擬機器的系統核心附加到VS2017,具體步驟見下圖 選中核心除錯模式、選自己配置的那個電腦、選中下面列表中核心。見下圖 點選附加,然後出現下圖介面,點選一下全部中斷。 然後我們在下面的Debugger Immediate Winddow視窗的 Kd> 一行輸入命令 g 讓系統執行起來。這樣虛擬機器中的系統又可以點選了。
最後一步了。使用我們剛剛建立的驅動工程編譯出來的.sys驅動檔案拷貝到虛擬機器中。用第五步的工具進行安裝、啟動。啟動的時候自動觸發VS2017中的下的斷點。至此可以像平時我們除錯程式一樣進行單步除錯了。 注意事項:1、一定要拷貝Debug版本的進行除錯。 2、拷貝到虛擬機器中的.sys檔案一定要是你原始碼編譯出來的。如果改動了原始碼後一定要重新拷貝一份新的驅動檔案到虛擬機器中除錯。否則無法觸發斷點的。 安裝驅動程式 啟動驅動程式 當驅動程式啟動時,發現斷點已經被激活了