windows内核开发学习笔记二十九:内核的关键组件之设备驱动程序

     前面介绍了执行体、内核、硬件设备抽象三个内核核心功能,这三个功能,位于内核模块ntoskrnl.exe和HAL中,其中执行体和微内核共存于内核模块ntoskrnl.exe中。除了这三部分外,其他的模块几乎都是以驱动程序的形式存在的。windows操作系统中的设备驱动程序,不一定对应着物理设备,也可以是虚拟设备,甚至完全与设备无关的仅仅是内核的扩展模块。从软件的角度而言,可以把设备驱动程序看成是windows内核的一种扩展机制,系统通过设备驱动程序来支持新的物理设备或者扩展功能。

      设备驱动是可以动态加载到系统中的模块,其文件扩展名为.sys,其格式是标准的PE文件格式。驱动程序中的代码运行在内核模式下,尽管它们可以直接操纵硬件,但理想的情况还是调用HAL中的函数与硬件打交道。因此,驱动程序往往调用C/C++语言来编写,从而可以方便地在Windows所支持的体系结构之间进行源代码层次上的移植。

   设备驱动程序有三种基本类型:

  • 即插即用驱动程序:也称为WDM驱动程序,通常是为了驱动硬件设备,由厂商提供的,与windows的I/O管理器、即插即用管理器和电源管理器一起工作。windows自身携带了大量的即插即用的驱动程序,用于支持各种常见的存储设备、视频适配器、网络适配器、输入输出设备等。
  • 内核扩展驱动程序:也称为非即插即用的驱动程序。这一类程序用于扩展内核的功能,或者提供访问内核模式代码和数据的一种途径。它们并没有集成到即插即用管理器和电源管理器的框架中,在引入即插即用管理机制以前开发的驱动程序都属于这一种类型,现在版本的windows程序仍有大量的内核扩展驱动程序。
  • 文件系统驱动程序:这一类驱动程序接收针对文件的请求,再进一步将请求转变成真正对于存储设备或网络设备的I/O请求,从而满足原始文件的请求。

        windows的即插即用管理器式I/O系统的一部分,它负责即插即用设备的内核支持,其职责是:自动检测设备的插入和移除;动态地分配硬件资源,例如中断、I/O端口和I/O寄存器;指示I/O管理器为设备加载正确的驱动程序;向内核及应用程序提供有关设备的插入和移除的通知机制。即插即用管理器根据总线和设备的功能分工,定义了一个驱动程序模型,让总线和设备的驱动程序协作完成设备的列举、插入和拔出等管理工作。支持这一个模型的驱动程序称为WDM(Windows Driver Model)驱动程序,共有三种类型:总线驱动程序、功能驱动程序和过滤驱动程序。

  • 总线驱动程序即负责管理总线上的设备(配合即插即用管理器)也为总线上的设备提供了访问总线资源的方法。
  • 功能驱动程序负责管理具体设备,向操作系统提供该设备的功能。
  • 过滤驱动程序的用途是监视一个设备的I/O请求及其处理过程,甚至增加或改变一个设备或驱动程序的行为。

     在WDM中,每个硬件设备都有一个设备驱动程序栈(简称设备栈),其中包含一个总线驱动程序和一个功能驱动程序,以及零个或多个驱动程序。即插即用管理器在设备列举过程中,依照总线与设备之间的关系,构建起一棵设备树,其中包含当前系统中所有被检测到的总线和设备。设备树的每个节点都代表一个实际的设备,该设备的设备栈为其提供软件服务,操作系统(实际上是I/O管理器)通过设备栈来访问或操纵设备。

      非即插即用的驱动程序和用途多种多样,其中内核扩展是最自然的用法。例如,许多系统工具使用内核扩展类型和驱动程序来获得windows内核中的各种系统信息,或者创建系统线程以便再系统进程环境中执行任务。另外,在windows内核中,也有一些模块虽然以.sys做为文件扩展名,但它们其实非常并非设备驱动程序,而是单纯的内核扩展动态链接库,供其他的驱动程序或者内核模块调用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jyl_sh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值