理解windows驱动程序

来源:互联网 发布:ios11怎么卸载软件 编辑:程序博客网 时间:2024/04/29 16:57

  在windows上,用户的应用程序执行在ring3级别, 驱动程序执行在ring0级别。首先需要理解ring3和ring0,即用户模式和内核模式。这个要以时间为顺序来说明比较好理解。在PC机发展的初期,比如在8086年代,在该cpu上运行的是DOS。8086有一套汇编语言指令集,程序员利用汇编或者高级语言编写的程序可以任意调用该CPU的所有指令,访问CPU的寄存器及内存空间,即可以随心所欲的做任何事情。在这个阶段,没有应用程序和驱动程序的区别。随心所欲固然好,但也带来了许多麻烦,应用程序在的一段代码随时都有可能毁掉你的操作系统,比如蓝屏,死机等情况。这样非常的不安全。所以INTEL出于安全性和稳定性的考虑,从80386开始,为CPU设计了从ring0到ring3四个不同的权限级,对数据也提供了相应的四个保护级别,运行在较低级别(ring3)的代码不能随意调用高级别的指令和访问一些数据。而且也只有ring0级的程序可以直接对物理硬件进行访问。由于windows NT是一个支持多平台的OS,为了与其他平台兼容,它只利用CPU的两个运行级别。一个被称为内核模式,即ring0.设备驱动程序就是运行在该模式下。另一个是用户模式,即ring3. OS的接口部分(windows api)以及所有的用户应用程序都运行在该级别。

 

怎么开发驱动程序?

要开发驱动程序,首先要安装DDK,即driver developement Kits. 如果是开发文件系统驱动的话需要安装IFS DDK. 它是普通DDK的超集.

DDK中包括什么?为什么要安装它?

DDK中包括编译环境,如果没有这个环境,你使用普通的VC的编译器不能编译驱动程序,因为其中的内核函数不能被识别。除此之外,还包括

一些工具软件和例子源代码。比如“device tree”工具等。

 

安装完后, 可以利用记事本写程序, 用build命令进行编译. 具体方法是进入“程序”->"Development Kits"->"Windows IFS Kit and DDk 3790"->

"Build Environments"->"windows XP"->"Windows xp Checked Build Environment", 在该命令行窗口中进入到你的源程序所在文件夹,

输入"build"命令,则会根据“sources”和"makefile"提供的信息对源文件进行编译,编译成功的话会在该文件夹中生成新文件夹,其中包含.sys

等文件。

  也可以在vc中写程序,设置一下vc,就可以直接在vc中编辑、编译。

  设置的具体方法:???

  也可以使用DriverStudio或WinDriver进行开发。

 

windows驱动程序分为两类,一类是不支持即插即用的NT式驱动程序,一类是支持即插即用的WDM驱动程序。

 

#pragma 指令用来对编译器作出一些指示。

 

原创粉丝点击