欢迎来到天天文库
浏览记录
ID:18888752
大小:57.50 KB
页数:20页
时间:2018-09-26
《windows nt驱动程序设计基础》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、WindowsNT驱动程序设计基础WindowsNT驱动程序设计基础转贴资料WindowsNT驱动程序设计基础 会员名:吴旭华 发布时间:2001/11/7文章摘要: 驱动程序是指管理某个外围设备的一段代码。NT采用更灵活的方法,允许杂应用程序和硬件之间存在几个驱动程序层次。这个分层允许NT更加广泛地定义驱动程序,包括文件系统、逻辑卷管理器和各种网络组件,以及各种物理设备驱动程序。-----------------------------------------------------------
2、---------------------正文:WindowsNT驱动程序设计基础 NT驱动程序设计当然远不是能在短短的一篇文章里说清楚的,也不是我能说明白的,毕竟我也只是最近一段时间才开始接触设计NT驱动程序。在本文里只是将自己在做驱动程序最开始的时候比较模糊的东西组织到了一起。设计NT驱动程序,最重要的资料当然是NTDDK文档。NT驱动程序的分层结构 在大多书操作系统中,驱动程序是指管理某个外围设备的一段代码。NT采用更灵活的方法,允许杂应用程序和硬件之间存在几个驱动程序层次。这个分层允许NT更加广
3、泛地定义驱动程序,包括文件系统、逻辑卷管理器和各种网络组件,以及各种物理设备驱动程序。1、设备驱动程序 这些是管理实际数据传输和控制特定类型的物理设备的操作的驱动程序,包括开始和完成I/O操作,处理中断和执行特定设备要求的任何差错处理。2、中间驱动程序 NT允许在物理设备驱动程序上分层任意树木的中间驱动程序。这些中间层次提供扩展I/O系统的功能一种方法,而不必修改底层的驱动程序。在我们所开始的光盘塔驱动程序中,就使用了这种分层结构,在设计过程中,我们并不用关心如何去与SCSI卡打交道,SCSI卡厂商和M
4、icrosoft提供的SCSI小端口程序和SCSI端口程序为我们解决了这个问题。我们需要做的就是在这些端口程序的基础上增加新的驱动程序层次,满足我们对设备进行控制的要求。3、文件系统驱动程序(FSD) FSD是一类比较特殊的驱动程序,通常负责维护各种文件系统所需要的磁盘结构。注意我们并不能使用DDK来开发FSD,而必须使用Microsoft的文件系统开发人员工具包,对此我们了解甚少,但我们想要对光盘塔开发出独特而且更有价值的应用,我们应该针对光盘塔开发我们自己的文件系统。SCSI驱动程序 针对我们的实际
5、应用,有必要对SCSI驱动程序先做一些介绍。SCSI驱动程序在整个NT设备驱动程序中都是比较特使的一类驱动程序。NTSCSI体系结构使用分层的驱动程序分开特定设备的管理与SCSI总线适配器(HBA)的控制。其结构如下所示。SCSI端口程序是由Microsoft提供的组件,通常处理常见的SCSI工作和隐藏本地操作系统的细节。SCSI小端口程序提供任何HBA特定的控制操作的例程,一般由提供HBA产品的厂商提供。 SCSI类驱动程序城关特定类型的所有SCSI设备,而不管它们连接到什么样的HBA上。例如有磁带机、
6、磁盘、CD-ROM等的类驱动程序。我们开发的jbChanger就是SCSI类驱动程序,管理所有的媒质交换设备(光盘塔)。一般比较少写SCSI过滤驱动程序,SCSI过滤驱动程序和NT的其它类型的过滤驱动程序一样,它截获和修改高层发送给SCSI类驱动程序的请求。这样就允许利用现有类驱动程序的功能,而不必从头开始写所有程序。NT内核模式对象 在我们的实际开发过程中的对象是SCSI设备,由于SCSI端口驱动程序已经隐藏了硬件控制操作,因此我在这里不讲述跟硬件相关的部份。如果今后的开发对象不同,需要对硬件进行操作
7、的时候,可能会对中断、DMA等有比较详细的了解,这些内容可以参考DDK帮助。 NT使用对象技术管理所有的数据,下面分别对一般驱动程序所涉及的一些对象做一介绍。不过在介绍这些对象之前,有必要先对驱动程序的结构做一介绍。驱动程序结构 NT驱动程序和一般的DOS/WindowsC语言程序不一样,它没有main()或者WinMain()函数入口。和DLL类似地,它向操作系统显露一个名称为DriverEntry()的函数,在启动驱动程序的时候,操作系统将调用这个入口。DriverEntry除了做一些必要的设备初始
8、化工作外,还初始化一些Dispatch例程入口。我们知道,NT和设备驱动程序打交道主要是通过CreateFile、ReadFile、WriteFile和DeviceIoControl等Win32API来进行的。这些API其实都对应着驱动程序的一些Dispatch例程。而驱动程序除了DriverEntry以外,主要就是由这些Dispatch例程组成的。例如调用Win32APICreateFile的时候,操作系统最终
此文档下载收益归作者所有