windows驅動開發的一點體會

來源:互聯網
上載者:User

初步開始開發驅動,而且都是自己一步一步自己走過來的,難免磕磕碰碰,走了不少彎路,做的是一個windows過濾驅動,過濾驅動應該算是驅動開發裡最好開發的,只是對經過的IRP進行一個處理(具體什麼處理,看你自己的需求)。

 

開發環境: Windows XP, 開發包: Windows DDK 2600。這裡重點介紹一下調試環境,安裝虛擬機器,使用虛擬機器作為目標PC(主要是藍屏電腦就會重啟),把IP設定成跟主PC的網段一致,這樣做的好處是可以方便主PC跟目標PC共用檔案,同時WinDbg也可以開啟虛擬機器上的調試檔案;下載WinDbg軟體,免費調試軟體,主要用於核心級的調試,具體使用可以參考WinDbg使用手冊,可以進行單步跟蹤,功能十分強大;下載DbgView軟體,這個軟體同樣是免費的,可以查看調試輸出資訊(由DbgPrint或KdPrint函數列印),使用也非常方便,具體參考微軟官方網站,驅動程式的調試資訊將列印在DbgView上,這樣便於定位程式的錯誤(主要還是邏輯錯誤);如果驅動程式發生錯誤,可能引起藍屏,這時可以通過下面介紹的方法進行錯誤的定位,系統崩潰之前,作業系統會將當前的呼叫堆疊記錄成一個dump檔案,不過首先要確定電腦是否讓作業系統儲存了Dump資訊,方法如下:按右鍵"我的電腦", 選擇"屬性",彈出"系統屬性"對話方塊,在對話方塊中,單擊"進階"選項卡,然後單擊"設定"按鈕(第三個設定按鈕),彈出一個對話方塊,在彈出的對話方塊中選中所有的複選框,OK了,這樣dump檔案將存放在C:/WINDOWS/Minidump目錄下,等待虛擬機器重啟之後,使用WinDbg開啟這個目錄下剛剛崩潰產生的dump檔案可以知道錯誤發生在什麼地方,這時需要先設定好Image File Path,WinDbg--File--Image File Path,將sys檔案的目錄寫上去,這個.sys檔案應該是驅動程式目錄下的.sys檔案,這點要注意,關於符號表路徑設定,這裡就不囉嗦了,接著開啟dump檔案後可以看到command視窗,選擇View--Call Stack,看到函數調用棧,這種函數調用關係式系統崩潰前的一個快照,因此可以分析出調用中的那句話導致了系統崩潰。如果不藍屏,使用DbgView進行錯誤定位,如果是系統提供的核心功能調用出錯,可以檢查傳回值(通過DbgPrint或KdPrint函數列印),查看ntstatus.h檔案,找到對應錯誤碼,從而確定了錯誤的根源。

 

在寫驅動程式的時候,盡量不使用應用程式層的RTL(執行階段程式庫)函數,全部使用DDK提供的RTL函數,這主要是因為驅動程式運行在RING 0級,而應用程式運行在RING 3級;盡量少使用全域變數(不過我還是用了^_^),主要是因為全域變數可能導致函數的不可重新進入性,解決的辦法就是將你要使用的全域變數以裝置擴充的形式儲存,並加以適當的同步保護措施(例如使用自旋鎖SpinLock)。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.