網上有很多關于驅動開發環境的資料,但大多不全。
??? 這里,個人推薦使用vc6.0+ds+windows ddk。
??? vc6.0大家再熟悉不過的了,也許你可能喜歡使用vc8.0,也就是.net 2005,它功能強大,調試方便,但這里還是推薦6.0,因為,ds會在vc6.0開發環境中另外增加一個導航工具條,很方便,同時也會增加一個菜單欄。
??? vc6.0安裝完畢后,再安裝windows ddk,其安裝包可以在網上搜索到,建議去微軟官方網站下載。具體下載哪個,得根據你電腦的操作系統來定,我的是windows xp,所以安裝了windows xp ddk。
??? 最后,安裝DriverStudio,全稱Compuware DriverStudio ,目前通用版本為3.2。
???
編譯ddk包。進入到......\Compuware\DriverStudio目錄下,我們可以看到兩個文件夾,DriverNetworks 和
DriverWorks,里面分別有BuildAllDNW.bat和BuildAllDW.bat,我們在命令行下面分別cd至這兩個目錄,再運行這兩
個批處理文件,可以看到提示,提示中說明了運行的格式,即:BuildAllDNW(或者BuildAllDW)
D:\winddk\2600(ddk的安裝路徑,這個是我機器上的路徑) WinXP(操作系統版本)
x86(我的CPU類型)。回車即可。把兩個批處理類似運行,就可以了,如果不編譯,系統會報錯,說沒有.lib靜態庫文件。
??? 開始第一個工程。打開vc6.0,設置ddk路徑,選擇菜單中或者工具條中的 ddk build
settings,把ddk的根目錄root
directory設置好,我的是“D:\WINDDK\2600”。然后選擇菜單或工具條第一項,啟動新建工程向導,一步步下去就可以了。編譯時選擇菜
單或工具條第四項。
???
driverstudio產生的驅動工程都會要連接ntstrsafe.lib這個庫,但實際上這個庫并不存在,在Project的Settings里的Link項中去掉這個庫,然后在工程中的sources文件里邊,找到下面一行:
TARGETLIBS=$(DDK_LIB_PATH)\ntstrsafe.lib $(DDK_LIB_PATH)\csq.lib
直接刪除即可。
有時候還會提示沒有ntstrsafe.h,#include<ntstrsafe.h>出錯,把它注釋掉即可。
?
上面這個錯誤出現在windows xp操作系統中,我曾經幫別人在2003 server中配置開發環境,結果發現,不會存在上述問題,而且可以使用vc6.0的編譯按鈕進行編譯,這在windows xp下是不行的。
調試。調試方法很多,我一般都用DbgPrint。
check和free的區別。簡單地說,check相當于debug,free相當于release,前者是調試版本,后者是發布版本。你可以使用以下語句實現僅在check版本中輸出調試語句:
#if dug
#define dprintf DbgPrint
#else
#define dprintf(x)
#endif
然后使用dprintf代替DbgPrint。
調試工具。ds自帶的softice,DriverMonitor,等。此外,Dbgview和DriverMonitor類似,可以從網上下載到的。Dbgview和DriverMonitor可以看到DbgPrint的字符串。
驅動的加載。這個比較復雜,有dosname等細節。還有動態和靜態加載的區別。動態加載可以參看FwHookDrv個人防火墻的例子,其中關鍵部分就是TDriver類,注意dosname。靜態加載就是注冊為服務即可,相對比較簡單。
轉換為vc工程。開始--程序--Compuware DriverStudio--develop--DDK sources to vcproj Converter,即可轉換,不會使用的多試幾次就會了,什么都說了,就沒有懸念了,呵呵。
驅動開發調試環境。建議采用虛擬機或者雙機的配置。因為驅動調試常常會出現藍屏等等,所以得雙機或者虛擬機,免得老是重啟,浪費時間和心神。