如何進行windows驅動程序開發

如何進行windows驅動程序開發

在國內使用Windows操作系統的電腦占絕大多數,Windows驅動和內核程序開發自從Windows誕生的時刻起,就保持著神秘的面紗,一直被認為是開發領域中比較高深的技術 。它需要程序員對Windows操作系統底層有很深刻的理解,同時又需要有豐富的調試經驗 。但同時,計算機很多領域又需要大量的驅動和內核開發人員,如PCI、USB設備的驅動程序開發 。同時 , 隨著計算機病毒和木馬的廣泛傳播,大量的安全方面軟件需要內核開發這方面的技術,如進程和線程的監視、文件和注冊表的過濾,以及諸如此類的防范Rootkit技術 。由于驅動和內核方面人才的短缺 , 它也一直被別人看成是待遇不錯的黃金職業 。
windows驅動程序可分為兩類三種:


第一類:傳統型驅動



傳統型驅動的特點就是所有的IRP都需要自己去處理,自己實現針對不同IRP的派發函數 。其可以分為以下兩種:


1.Nt式驅動:此驅動通過注冊系統服務來加載 , 并且不支持即插即用功能(即沒有處理IRP_MJ_PNP這個IRP) 。


2.WDM驅動:此驅動不通過注冊系統服務來加載,需要自己編寫inf文件 。同時,它與NT式驅動相比最大的特點就是支持即插即用功能 。


【如何進行windows驅動程序開發】第二類:微過濾驅動


微過濾驅動是微軟推出的一個驅動框架 。它將驅動程序內創建設備對象之類的操作全部封裝了,讓用戶無需理會此部分繁雜的工作 。用戶只需要針對不同的IRP處理好他們響應的前-后操作還有用戶態與內核態的通信即可,即可以理解為微過濾驅動對IRP的處理類似于用戶態的API HOOK 。下面一品威客網給您介紹windows驅動程序開發的步驟流程,希望對您有所幫助 。



1、理解驅動程序和操作系統的基礎知識


開始設計驅動程序之前,應該理解驅動程序在Windows操作系統中的基本工作原理 。了解這些基本原理可以幫助開發人員作出正確的開發決定,選擇正確的開發流程 。


2、弄清楚與具體設備相關的驅動程序需求


每個Windows設備類都有具體的軟硬件需求 。設備和驅動程序應該遵循這些需求 , 以便能夠與其它系統組件配合工作 。在軟硬件開發過程中,理解并遵循這些需求可以節約開發時間和資金投入 。



3、做出各種驅動程序開發決定


在編寫代碼之前,需要作出一些基本的驅動程序設計決定 。比如,決定驅動程序要在哪些Windows操作系統和硬件平臺上運行,是否可以通過修改已有的示例驅動程序或以前的驅動程序達到目標,避免從零開始 。


4、編譯、測試及調試驅動程序


編譯驅動程序與編譯用戶模式的應用程序并不相同 。WDK文檔給出了使用"free"和"checked"操作系統編譯的技巧 , 以及配置驅動程序編譯環境的提示 。需要對盡可能多的硬件配置反復進行測試和調試,以確保驅動程序能夠正確地工作 。


5、提供驅動程序安裝包


一個驅動程序必須安裝哪些東西,這與驅動程序和設備的類型相關 。WDK文檔列出了必須提供的設備安裝組件,以及設備安裝過程中Windows所期望提供的東西 。


6、發布驅動程序


這是驅動程序開發的最后一步 。如果驅動程序符合微軟Windows程序的質量標準,那么可以通過微軟的Windows更新程序將其發布 。


驅動開發的主要工具:DDK(Device Development Kit),WinDriver,DriverStudio,NIVISA 。這幾種開發工具各有優缺點 。用WinDriver和DriverStudio開發驅動比DDK簡單容易上手,但WinDriver開發驅動沒法脫離WinDriver環境不好發布,所以還是用DriverStudio比較好 。而NI-VISA主要用于儀器驅動程序開發,在儀器控制方面用得較多 。需要指出的是,不管哪種開發方式,都離不開VC開發環境 。


經驗總結擴展閱讀