Windows驱动程序开发基础(四)驱动的编译调试和安装

Windows驱动程序开发基础,转载标明出处:


以下说一下开发出来驱动程序以后怎样编译。一般有以下几种方式:

1. 建立Makefile文件,用nmake工具进行编译和链接。

2. 建立Makefile,sources, dirs文件。用build工具编译。

3. 用集成开发环境进行编译链接。


我採用的是第三种方式,通过VS2010+wdk配置Windows驱动程序开发环境。地址:   


可是接下来要说的是那样配置的部分原因:

   编译函数的过程中有4种调用约定:c语言调用约定:函数用_cdecl修饰;标准调用约定:函数用_stdcall 修饰。高速调用约定:函数用_fastcall 修饰;C++类成员函数调用约定:函数用 thiscall 修饰。

    当中的前两种是经经常使用到的。

c语言调用约定中。会在目标文件里产生一个符号来取代这个函数:下划线+函数名的形式;而标准调用约定的形式是:下划线+函数名+@X,同一时候返回X。当中X代表须要清理堆栈是须要的数字。比如:

    Windows驱动程序须要使用到标准调用约定。对于DriverEntry函数。系统会寻找_DriverEntry@8作为驱动程序的入口。可是VS2010默认的是C语言调用约定。所以仅仅存在_DriverEntry,因此调用的时候就会出错。所以要将C/C++中的调用设置为_stdcall 修饰。


Tips:

1. 非常多C/C++的的使用技巧都要谨慎的使用,甚至C语言中的malloc函数和C++中new操作都不要使用。由于在内核模式下。程序无法调用用户模式以下的API。


2. 最后安调试驱动程序能够使用:DbgView,装驱动能够使用DriverMonitor。


本小节完。


參考书籍:


《Windows驱动开发技术具体解释》

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgyjxs.html