開發工具:Visual Studio 2015 企業版
目 標 機:Windows 10 X86
前提:我們已經成功安裝了Visual Studio 2015以及WDK,而且更重要一點是一定要SDK版本和WDK版本保證一致,如果不一致會造成Visual Studio 2015里面C/C++的宏定義和使用的WDK不匹配,嚴重影響驅動程序的編譯!關於這個問題,可以看這篇文章:http://www.cnblogs.com/sunylat/p/6286527.html
本篇博客涉及到的所有工具和源碼下載:http://download.csdn.net/detail/sunylat/9740132
在進行下列操作之前,請到上面地址下載所有本博客涉及到的所有工具和源碼,隨后進行下面嘗試!!
一,驅動安裝和調試工具准備:把壓縮包里面的下面兩個工具拷貝到虛擬機中。
1,EzDriverInstaller,這個工具直接運行就可以了。
2,DbgView,在使用它之前,注意“DebugView”目錄中有一個"1.reg"文件,執行它,隨后重新啟動操作系統,從而保證DbgView能夠捕獲驅動信息,否則無法捕獲驅動信息!
二,編譯張帆的第一個WDM工程:我采用建立一個空白的WDM工程,隨后拷貝張帆WDM工程代碼方式來完成,這樣最大限度保證工程代碼的正確性,從而可能保證我們順利編譯通過!!
1,"新建項目"->Visual C++->Leguay->"Empty WDM Driver",選擇好工程路徑,輸入工程名稱為“HelloWDM”,隨后點擊“確定”按鈕。
2,拷貝張帆第一個WDM工程里面的3個文件到我建立的工程中。在拷貝時候“HelloWDM.inf”需要覆蓋,直接覆蓋就可以了!!
3,點擊VS2015菜單“生成”->“重新生成 HelloWDM”,第一次嘗試編譯這個工程。
4,編譯結果發現錯誤,錯誤提示是一個指令配置錯誤,打開“HelloWDM.inf”,在它“Version”小節中加入“CatalogFile=HelloWDM.cat”,隨后保存這個文件。
5,繼續編譯,依然存在錯誤,解決方法:關閉C++的“將警告視為錯誤”。
6,鼠標右鍵點擊工程“屬性”,隨后點擊“C/C++”,關閉C++的“將警告視為錯誤”。
7,繼續嘗試編譯,依然發現錯誤,這次我們將關閉inf2Cat。
8,鼠標右鍵點擊工程“屬性”,inf2Cat,把“Run Inf2Cat”選擇為“否”,隨后點“確定”按鈕。
9,繼續編譯,VS2015提示編譯驅動成功!!那么我們就去目標機里面試一下安裝我們編譯成功的驅動吧!
二,去目標機里面測試驅動:把我們編譯好的驅動拷貝到虛擬機里面。
1,首先用管理員權限打開“Dbgview.exe”,隨后選擇它菜單“Capture”,選中“Capture Kernel”,這樣我們才能得到驅動的調試信息!
2,打開“EzDriverInstaller.exe”,點擊“File”,在彈出對話框中選擇我們要安裝的驅動程序,實際上是選擇那個"HelloWDM.inf"文件,WDM驅動安裝都是選擇這個inf開始。
3,點擊“Add New Device”按鈕。
4,添加操作結束了,實際上這次安裝失敗了,因為“EzDriverInstaller”界面中,並沒有顯示出來我們要安裝的驅動!
5,這是最終安裝操作結束后的界面。
6,我們看“Dbgview”中沒有任何驅動相關的調試信息!
三,繼續修改驅動程序相關文件:
1,修改“HelloWDM.inf”:驅動安裝失敗了,應該是我們編寫的驅動程序什么地方有問題了,經過多次排查,最終發現是“HelloWDM.inf”的一項設置的問題!!在“SourceDisksFiles”這個小節中!
原來配置:
HelloWDM.sys = 1,MyDriver_Check,
修改后配置
HelloWDM.sys = 1,,
最終修改完“HelloWDM.inf”的截圖:
2,把重新編譯好的驅動拷貝到目標機中。
3,重新用“EzDriverInstaller”安裝這個WDM驅動,這次“EzDriverInstaller”最終顯示我們真的安裝成功了,“EzDriverInstaller”里出現了這個WDM驅動了,並且“Dbgview”里面顯示了整個驅動完整的調試信息!!
4,我們通過設備管理器,也真的看到了,我們成功安裝的張帆的第一個WDM驅動了!!
以上就是經過我3天不懈努力,無數次藍屏最終完成的成果!!!張帆的《windows驅動開發技術詳解》,從出版到最終的第三次印刷,到目前為止,依然是國內學習驅動非常好的圖書,如果不謙虛地說,應該是首屈一指的圖書,非常系統全面介紹驅動開發相關知識,其它驅動開發圖書,真的沒法和它比!!!但是隨着時間推移,當時的開發環境已經過時了,目前VS2015是微軟一個非常強大的開發工具,同時也是驅動開發的好工具,能夠使用VS2015,並且還能夠編譯和安裝張帆的例子,無疑是最好的學習方式,我這些天一直在努力,最終我完成了!!!希望大家能夠在學習驅動的時候,踩着我的肩膀前進,比我更幸福些!!!
四,如何編譯其它平台的驅動:鼠標右鍵工程”屬性“->Driver Settings,隨后選擇目標OS和平台就可以了!
下面是win7 X86平台成功安裝驅動的截圖:
目前編譯驅動均為X86平台!!
參考文章:http://blog.csdn.net/whatday/article/details/9384577