如何进行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开发环境 。


经验总结扩展阅读