標籤:style blog http color os io strong 檔案 ar
本部落格為Windows驅動開發的基礎。轉載標明出處:http://blog.csdn.net/ikerpeng/article/details/38776407
一個簡單的Windows驅動程式一般包括:標頭檔(決定NT,WDM;定義宏。。。),入口函數(相當於main),建立裝置常式(相當於函數的實現),驅動的卸載,預設派遣。
知識點:
1. 兩種驅動:NT和WDM:前者不支援隨插即用;標頭檔分別是:NTDDK.h, WDM.h ;
2.DriverEntry才是函數的入口,包括兩個參數:pDriverObject(I/O管理器傳過來的驅動對象),pRegistryPath(指向驅動負責的註冊表);
3. 裝置擴充結構體:負責補充定義裝置的相關資訊;
4.用#pragma INITCODE 將程式載入到INIT記憶體地區;INIT標誌標明該程式成功載入後可以卸載;
5.加入extern“c”才能保證用C++寫的時候不會出錯;
6.驅動程式會註冊一些回呼函數供作業系統調用(都在pDriverObject裡面),通過指標的方式將地址告訴作業系統;
7. CreateDevice(pDriverObject)是一個協助函數,輔助DriverEntry建立一個裝置對象;
構造一個Unicode字串存放裝置對象名稱;
IoCreateDevice建立裝置對象;
填寫裝置的擴充結構體;
建立符號連結;()
建立成功則返回,不成功則刪除。
8.卸載驅動處理驅動被卸載時的情況:第一個裝置對象的地址儲存於DeviceObject域中,每一個裝置對象中的NextDevice域記錄著下一個裝置對象的地址,這樣形成一個鏈表,會用到:#pragma PAGEDCODE:
由驅動對象得到裝置對象;
刪除裝置對象的符號連結;
遍曆裝置對象,並刪除。
9. 預設派遣中指定了對裝置對象的建立,關閉和讀寫的操作,和IRP的狀態有關。
參考書目:
《 Windows 驅動開發技術詳解 》
Windows 驅動入門(一)