使用Prefast測試驅動問題
摘要: Prefast是MS開發的一個測試驅動代碼的小工具,
它的作用是盡早找出代碼中常的BUG.
在編譯時參與進來查找BUG.
閱讀全文
posted @
2009-01-21 11:52 水 閱讀(1632) |
評論 (0) 編輯
驅動調試的一般性技巧
摘要: 一般性調試技巧包括打印調試信息、查看dump文件等。這些方法在調試驅動中比較常見,使用也比較簡單。
閱讀全文
posted @
2009-01-15 15:31 水 閱讀(3680) |
評論 (2) 編輯
驅動調試的幾個細節問題IRQL_NOT_LESS_OR_EQUAL
摘要: 今天在調試驅動的時候,發現一個開始覺得很奇怪的問題,就是調用RtlStringCbPrintfW函數來格式化WCHAR字符串時,一定藍屏,提示
IRQL_NOT_LESS_OR_EQUAL,并且比較郁悶的是,在虛擬機上有時不會出現,有時會出現,但在真正的主機上一定會出現(Windows xp sp2)。
一般出現IRQL_NOT_LESS_OR_EQUAL,是IRQL在級別高的地方調用了分頁內存,所以,我就想到把當前的IRQL打出來看看,發現在進入函數
的時候,當前的IRQL是0(PASSIVE_LEVEL),而在執行這段代碼的地方,IRQL是2(DISPATCH_LEVEL),是什么原因使得IRQL發生了變化呢?
仔細查看代碼后,發現了原因,因為在執行這段代碼之前,通過NdisAcquireSpinLock獲取旋轉鎖,而在旋轉鎖釋放之前,其中的代碼是跑在
IRQL=2的,另外,RtlStringCbPrintfW需要處理分頁內存(PagedPool),但在IRQL=2的情況下,是只能處理非分頁內存的(NonpagedPool),所以,
閱讀全文
posted @
2009-01-14 17:05 水 閱讀(5030) |
評論 (0) 編輯
NDIS 中間層驅動(IM Driver)的安裝與卸載過程
摘要: 中間層驅動對上層來說,扮演一個Miniport Driver的角色,它在上邊沿向NDIS注冊一組Miniportxxx函數;對于下層Miniport Driver來說,中間層驅動扮演一個Protocol Driver的角色,因此它在下邊沿向NDIS注冊一組Protocolxxx函數。Miniport Driver通過調用NdisMRegisterMiniport向NDIS注冊一組MiniportXxx函數;Protocol Driver 通過調用 NdisRegisterProtocol向NDIS注冊一組ProtocolXxx函數。
閱讀全文
posted @
2009-01-12 15:35 水 閱讀(5420) |
評論 (3) 編輯
使用WinDbg和VMware調試NDIS中間層驅動程序
摘要: 我這里將一步一步的介紹,是從新手的角度來講的,所以對高手來說,可能有些啰嗦。如果你看完這篇文章還不知道如何設置,那么原因可能有兩個:1. 我沒講好;2. 你需要稍微認真看下并實踐下,并實現對相關基本概念要有所了解。
閱讀全文
posted @
2009-01-04 16:36 水 閱讀(5807) |
評論 (4) 編輯