Windows 驅動入門(一)

來源:互聯網
上載者:User

標籤: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 驅動入門(一)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.