要开发一个windows驱动程序,需要先掌握C语言相关知识,并理解一些操作系统知识,然后搭建windows driver开发环境,以及准备一些必要的工具。

驱动程序与普通应用程序的区别

我们知道,windows系统程序分为四个运行级别:R0,R1,R2,R3,其中,R3运行应用程序,权限最低;R0运行内核代码,管理硬件设备及运行驱动程序,权限最高,也就是说,一旦我们的驱动代码被OS内核加载,那么我们的驱动程序就具备了最高权限,这是一件很开心的事情,也是一件很可怕的事情,开心在于我们可以实现更高级的功能,可怕的是,一旦产生错误,系统就会蓝屏。R1,R2两个级别被Windows系统弃用,我们不必理会。

NT、WDM、WDF的区别

对于一个驱动程序开发新手,包括我自己,其实很纠结。首先我们分不清三者之间的关系和区别,其次,不知道到底该学哪个。其实三者并无本质区别,学哪个都行,当你遇到问题,需要解决问题的时候,就自然掌握和理解了。
NT:没有电源管理和即插即用到处模块
WDM:有电源管理和即插即用,可实现inf文件安装
WDF:WDF框架是为了减少开发者因为自身水平的限制而出现的不必要蓝屏错误,WDF框架将操作准化,相当于把简答题变成了填空题,降低了出错概率。

常用工具

Visual Studio 20xx:开发工具
Windows SDK:开发库
WDK:驱动开发库
DebugViewer:调试内核,查看内核打印输出
DriverMonitor:驱动加载工具,省去了手动安装过程,非常方便
PcHunter:windows信息查看软件,比OS自带的任务管理器显示内容更多
DeviceTree:查看设备列表
WinObj:windows对象查看
IDA Pro:反编译工具(暂时用不到)