1. 程式人生 > >Windows7驅動調試小Tips

Windows7驅動調試小Tips

執行命令 file and 其它 one online aud b- locked

Windows7驅動調試小Tips

0x01

Windows7以下(包含Win764位系統)調試驅動時會發現DbgPrintDbgPrint用法參考[1])打印的內容並沒有在DbgView裏面顯示出來,可是你可能有若幹證據表明。相關代碼肯定已經執行過了。使用Windbg進行雙擊調試時也沒有內容打印在調試器裏面。事實上文檔[2]裏面已經有說明了:

In Microsoft Windows Server 2003 andearlier versions of Windows, the DbgPrint and KdPrint routines send messages to the kernel debuggerunconditionally. In Windows Vista and later versions of Windows, these routinessend messages conditionally, like DbgPrintEx

and KdPrintEx. Whichever version of Windows you are using, youshould use DbgPrintEx, vDbgPrintEx,vDbgPrintExWithPrefix, and KdPrintEx,because these routines enable you to control the conditions under which themessage is sent.

簡言之,就是系統對這樣的調試信息的輸出設置了限制。

要解除這樣的限制(當然主要是開發者為了調試的方便),更改(添加)例如以下的註冊表信息就可以解決。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Debug PrintFilter]

"DEFAULT"=dword:0000000f

使用註冊表導入的方式,可能導入失敗,建議查看下是否在相應的註冊表位置是否已經建立了相關的鍵值,或者幹脆手工輸入。也非常easy。

技術分享

0x02

Vista開始(當然我們主要關註Windows7),系統要求驅動程序都必須有數字簽名,否則無法正常使用,普通文件夾下的驅動假設沒有簽名。直接載入失敗。而boot型的驅動,假設之前是有簽名的。你替換成無簽名的,那麽重新啟動之後直接會進入系統文件修復給你修復成原來的文件。這對於開發者來說非常不方便。有兩個解決方式:

a、進去系統時,按下F8進入Window7的啟動選擇模式。選擇“禁用驅動程序簽名強制”或者“調試模式啟動”,本次有效。

b、使用windbg雙機聯調模式時,“驅動程序簽名強制”是禁用的。

c、網上的方案。把驅動簽名強制要求直接關閉,通過管理員權限啟動CMD,然後輸入命令:bcdedit.exe -set loadoptionsDDISABLE_INTEGRITY_CHECKS 使用這樣的方式之後是一直生效的,系統安全性會打折扣,虛擬機就無所謂。假設是真機,建議適當的時候再打開。

能夠簡單刪除就可以,執行命令:bcdedit -deletevalue loadoptions。事實上能夠EasyBCD工具來改動(原理一樣)。

只是須要註意的是我在win7 x64 sp1系統用這樣的方式來測試,從來沒成功過,後來查了下是由於裝了SP1(或者某些補丁)之後。會導致該方法失效。

dbcdedit.exe -setTESTSIGNING ON,該方法有副作用,會在桌面留水印。同一時候還有和c方案相同的問題。

0x03

設置虛擬機下的Win7或者Win8系統(包含他們的x64位系統)雙機調試時,要加入一個串口設備,由於虛擬機硬件配置裏面的打印機設備占用了第一個串口設備,因此你新加入的串口設備實際上用的是COM2port了,這個時候用windbg去連接,會提示無法打開連接port,這個與WMWare的版本號有關系,說說怎麽解決吧。至少有兩個解決方式。

a、把打印機設備刪除之後。再加入串口設備,這時你會發現新加入的串口設備是1了,最終能夠愉快的調試了(註意:和命令管道名並沒有什麽關系。這個是能夠改動的,僅僅要和windbg的配置一致就能夠了)。

技術分享

b、我不想刪除打印機設備,就用串口2,那麽你須要進虛擬機系統。在加入或者改動引導項時把調試port改動為COM2。也是能夠的。改動方法能夠通過msconfig直觀的改動,也能夠通過bcdedit命令改動(bcdedit /dbgsettings serial baudrate:115200 debugport:2)。

技術分享

技術分享

參考文檔

[1] DbgPrintroutine http://msdn.microsoft.com/en-us/library/windows/hardware/ff543632(v=vs.85).aspx

[2] Reading and Filtering DebuggingMessages http://msdn.microsoft.com/en-us/library/windows/hardware/ff551519(v=vs.85).aspx#example

[3] Getting DbgPrintOutput To Appear In Vista and Laterhttp://www.osronline.com/article.cfm?id=295

[4] 使用DbgPrint打印字符串和其它http://blog.csdn.net/misterliwei/article/details/3559793

[5] wdk搞死我了求救http://bbs.csdn.net/topics/390539963

[6] W?i?n?d?o?w?s?7?+?W?D?K?+?V?S?2?0?1?0?+?V?i?s?u?a?l?D?D?K????????http://wenku.baidu.com/view/7f74b0e49b89680203d825f4.html

Windows7驅動調試小Tips