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

2025-08-26 03:43:44

c罗世界杯冠军

Windows驱动程序开发基础,转载标明出处:http://blog.csdn.net/ikerpeng/article/details/38793995 以下说一下开发出来驱动程序以后怎样编译。一般有以下几...

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函数。系统会寻找_DriverEntry@8作为驱动程序的入口。可是VS2010默认的是C语言调用约定。所以仅仅存在_DriverEntry,因此调用的时候就会出错。所以要将C/C++中的调用设置为_stdcall 修饰。

Tips:

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

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

本小节完。

參考书籍:

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