WIN10 + VS2015 + WDK10 + SDK10 + VM虛擬機驅動開發調試環境搭建


一、准備工作

1 系統環境:Win10系統

2 開發工具:VS2015

3 驅動開發工具:WDK10

 Windows SDK :SDK10(VS2015中可以勾選安裝)

5 VM虛擬機     : VMware WorkStation 12



win10 64位下驅動安裝工具下載地址(此工具只在上述環境下測試過,請在虛擬機中測試過再在真實環境下安裝否則藍屏自己負責)



注意事項:
關閉 、主機 客戶機 防火牆 、 互相ping都能ping通。


二、具體操作步驟


工具安裝就不說了,不會的百度一下。只說一下一些關鍵的地方
 

1、安裝好虛擬機后,給虛擬機增加一個串口設備。具體操作見圖:






完成配置后虛擬機設備配置就多了一個串行端口的設備。因為打印機用了端口1。所以設備里面顯示的是串行端口(如果想設置成端口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的虛擬機調試驅動拷貝到虛擬機中安裝。






因為VS2015可以調試x86 x64兩種驅動所以兩個都拷貝到虛擬機安裝。

4、VS2015開發工具配置

在VS2015的菜單欄點擊DRIVER--TEST--CONFIGURE DEVICES會報錯估計是VS2015的Bug求大神指點。如圖

 


這里不行我們換個地方配置,從工程屬性里面進行配置。右鍵工程屬性配置從這也可以進行測試設備的配置:



配置界面,下面兩個選項第一項由VS2015幫我們創建一個WDKuser測試賬戶,自動打開測試模式等。第二個是使用我們自己配置的參數。由於上面我們已經配置了串口參數 、設置了調試模式所以我們選擇第二個就行了。



如下配置在內核模式中,選擇串口、配置好波特率、勾上2個選項、管道名稱、端口號。




出現上述紅色框字樣則說明配置已經成功了。(不要開啟全局代理軟件,否則會出現連接不上的問題)。



5、使用工具安裝調試64位驅動

網上下的下面的驅動安裝軟件貌似64位的都用不了。



自己動手豐衣足食大笑,自己在網上弄了個源碼改了下弄成可以加載64位的驅動的版本了。



使用DebugView打印內核調試信息是開發驅動的非常重要的手段,但DebugView默認在WINDOWS 10下卻無法獲取內核的調試日志,驅動調用KdPint/DbgPrint等的打印結果是無法被DebugView給捕捉到的。設置方法如下(復制下面的代碼到txt文件。改后綴為.reg后執行,然后重啟電腦):

 

[cpp]  view plain  copy
 
  在CODE上查看代碼片 派生到我的代碼片
  1. Windows Registry Editor Version 5.00  
  2.   
  3. [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Debug Print Filter]  
  4. "DEFAULT"=dword:0000000f  

 


還有自己編譯出來的驅動要使用編譯的Debug版本來測試,Release版本是不會執行KdPrint/DbgPint函數的。

下面是在Win10 64位的虛擬機中用此安裝程序,加載64位的驅動以及用DebugView查看驅動打印消息的截圖結果。



6、在VS2015中下斷點進行調試

如果你第五部已經完成了,並且在DebugView中已經能夠輸出調試的打印信息了,辣么騷年你已經離成功只有一部之遙了大笑


創建一個驅動工程,WDK10提供的模板中根本沒有提供NT驅動模板,我們如何創建NT驅動呢?
解決:其實雖然沒有提供NT模板,但是我們可以建立WDM空模板工程,然后再自己添加文件,編譯,得到的也就是NT驅動了。


驅動工程中會幫你建立一個inf文件,NT是使用不到的,可以直接刪除。我們直接添加一個MyDriver.c

在文件中添加測試代碼。

 

[cpp]  view plain  copy
 
  在CODE上查看代碼片 派生到我的代碼片
  1. #include <ntifs.h>   
  2.   
  3. VOID DriverUnload(PDRIVER_OBJECT objDriver)  
  4. {  
  5.     // 避免編譯器關於未引用參數的警告  
  6.     UNREFERENCED_PARAMETER(objDriver);  
  7.   
  8.     // 什么也不做,只打印一行字符串  
  9.     KdPrint(("My Dirver is Ending..."));  
  10. }  
  11.   
  12. NTSTATUS DriverEntry(PDRIVER_OBJECT objDriver, PUNICODE_STRING strRegPath)  
  13. {  
  14.     // 避免編譯器關於未引用參數的警告  
  15.     UNREFERENCED_PARAMETER(strRegPath);  
  16.   
  17.     // 打印一行字符串,並注冊驅動卸載函數,以便於驅動卸載  
  18.     KdPrint(("My  Dirver Is Starting!\r\n"));  
  19.   
  20.     objDriver->DriverUnload = DriverUnload;  
  21.   
  22.     return STATUS_SUCCESS;  
  23. }  


編譯,報錯,沒有關系,這些都是因為安全警告等級太高了,我們可以降低編譯器警告等級的方式解決:

 



執行編譯,編譯的時候選擇Debug模式,X64的選項。編譯成功后,按照上面的第五步進行基本測試可以。


不知不覺感覺已經寫了好長了。。。。奮斗抽口煙壓壓精。好吧我不抽煙的。。。。。繼續
如果上述的驅動成功編譯出來了。辣么現在我們開始附加虛擬機的內核進行調試了。
首先把虛擬機的系統內核附加到VS2015,具體步驟見下圖:


選中內核調試模式、選自己配置的那個電腦、選中下面列表中內核。見下圖


點擊附加,然后出現下圖界面,點擊一下全部中斷。


然后系統就斷下了,虛擬機的系統我們鼠標已經點不了,現在系統處於掛起狀態了。見下圖


現在我們可以到源代碼中下斷點了。我就隨便下個斷點了,見圖:


然后我們在下面的Debugger Immediate Winddow窗口的 Kd>  一行輸入命令   g     讓系統運行起來。這樣虛擬機中的系統又可以點擊了。

最后一步了。使用我們剛剛建立的驅動工程編譯出來的.sys驅動文件拷貝到虛擬機中。用第五步的工具進行安裝、啟動。啟動的時候自動觸發VS2015中的下的斷點。至此可以像平時我們調試程序一樣進行單步調試了。
注意事項:1、一定要拷貝Debug版本的進行調試。
                  2、拷貝到虛擬機中的.sys文件一定要是你源碼編譯出來的。如果改動了源碼后一定要重新拷貝一份新的驅動文件到虛擬機中調試。否則無法觸發斷點的。


三、結束語

       本人也是剛開始研究驅動開發,上述如果有什么不對的請大家指點、共同交流。至此整個調試過程已經結束。可以開始過游戲驅動保護開發了。感謝大家支持。。。。大笑

原文地址: http://blog.csdn.net/qing666888/article/details/50858272

 


免責聲明!

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



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