Windows NT 设备驱动程序开发基础(3) (转)

本文介绍了Windows NT设备驱动程序的基础知识,包括内核代码运行级别、关键对象(如I/O请求包IRP、DPC、驱动程序对象、设备对象和中断对象)的作用及其在驱动开发中的使用方式。
Windows NT 设备驱动程序开发基础(3) (转)[@more@]1.3 实现细节 
 
 1.3.1 内核代码运行级别 
 
  windows NT为它的内核 模式的代码分配了不同的级别。在同一个 cpu上,级别低的过程 
可以被任何级别更大的过程中断。级别由低到高排列如下: 
 
 级别名称 运行于该级别的过程 
 
 PASSIVE_LEVEL  driverEntry, Unload, ShutDown, DispatchXxx。 
 
 APC_LEVEL 在某些特殊情况下,大 存储量设备的 驱动 程序运行于该级别。 
 
 DISPATCH_LEVEL StartIo, AdapterControl, ControllerControl, IoTimer,Dpc。 
 
 DIRQLs 各种中断处理程序。 
 
 表二 
 1.3.2 几个 对象 
 
 i) I/O请求包(IRP) 
 
 I/O管理器每收到一个来自 用户的请求就创建一个该结构,并将其作为参数传给驱 
动程序的DispatchXxx、StartIo过程。该结构中存放有请求的类型,用户缓冲区的首地 
址,用户请求数据的长度等信息。驱动程序处理完这个请求后,也在该结构中添入处理 
结果的有关信息, 调用IoCompleteRequest将其返回给I/O管理器,用户程序的请求随即 
返回。 
 
 ii) DPC 
 
 当驱动程序中要用到Dpc过程时,需要创建该对象。具体作用请见1.3.3。 
 
 iii) 驱动程序对象(Driver object) 
 
 该对象在驱动程序被启动时由I/O管理器创建,保存有该程序处理各种请求的过程 
入口、该程序所驱动的全部设备对象的链表等。 
 
 iv) 设备对象(DeviceObject) 
 
 每发现一个可以驱动的设备,驱动程序调用IoCreateDevice创建一个该对象。该 

对象有一个指针DeviceExtension指向一块由驱动程序定义的结构,其中保存有关此设备 
的如端口号,中断向量等全部信息。 
 
 v) 中断对象(Interrupt) 
 
 该对象在驱动程序调用IoConnectInterrupt时创建,存有中断及处理的过程的信息。 
当一个中断发生时,I/O管理器用它寻找对应的处理过程。 
 
 
 1.3.3 推迟过程调用(Deferred Procedure Call) 
 
 由于中断处理过程运行于较高的DIRQL级,它们能屏蔽许多级别小于或等于它们的过程 
执行,如果它们占用CPU时间过长,很容易使 系统 性能下降。因此中断处理过程应将一 
些不是很紧急的任务放在被称为Dpc的过程中,在完成数据传输等紧急任务后将一个DPC 
对象放在系统DPC队列的末尾,然后退出,尽量早地让出CPU。系统将在完成所有DIRQL级 
的任务后处理DPC队列,在DISPATCH_LEVEL执行每一个DPC 对象指定的Dpc过程,完成中 
处理断过程未尽的任务。 
 
-- 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-992237/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10752043/viewspace-992237/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值