標籤:驅動開發 windows 7
Windows驅動程式開發基礎,轉載標明出處:http://blog.csdn.net/ikerpeng/article/details/38793995
下面說一下開發出來驅動程式以後如何編譯。一般有以下幾種方式:
1. 建立Makefile檔案,用nmake工具進行編譯和連結;
2. 建立Makefile,sources, dirs檔案,用build工具編譯。
3. 用整合式開發環境進行編譯連結。
我採用的是第三種方式,通過VS2010+wdk配置Windows驅動程式開發環境。地址: http://blog.csdn.net/ikerpeng/article/details/38761441
但是接下來要說的是那樣配置的部分原因:
編譯函數的過程中有4種呼叫慣例:c語言呼叫慣例:函數用_cdecl修飾;標準呼叫慣例:函數用_stdcall 修飾;快速呼叫慣例:函數用_fastcall 修飾;C++類成員函數呼叫慣例:函數用 thiscall 修飾。
其中的前兩種是經常用到的。c語言呼叫慣例中,會在目標檔案中產生一個符號來代替這個函數:底線+函數名的形式;而標準呼叫慣例的形式是:底線+函數名+@X,同時返回X。其中X代表需要清理堆棧是需要的數字。例如:
Windows驅動程式需要使用到標準呼叫慣例,對於DriverEntry函數,系統會尋找[email protected]作為驅動程式的入口,但是VS2010預設的是C語言呼叫慣例。所以只存在_DriverEntry,因此調用的時候就會出錯。所以要將C/C++中的調用設定為_stdcall 修飾。
Tips:
1. 很多C/C++的的提示都要謹慎的使用,甚至C語言中的malloc函數和C++中new操作都不要使用。因為在核心模式下,程式無法調用使用者模式下面的API。
2. 最後安調試驅動程式可以使用:DbgView,裝驅動可以使用DriverMonitor。
本小節完。
參考書籍:
《Windows驅動開發技術詳解》
Windows驅動程式開發基礎(四)驅動的編譯調試和安裝