- 9
- 0
- 约8.53千字
- 约 3页
- 2018-05-09 发布于福建
- 举报
第23卷第4期 四川理工学院学报(自然科学版) Vo1.23 No.4
2010年 8月 JournalofSichuanUniversityofScienceEngineering(NaturalScienceEdition) Aug.2010
文章编号:1673·1549(2010)04-0414-03
基于 IRP的Windows设备驱动程序 间通讯的实现
居锦武
(四川理工学院计算机学院,四川 自贡 643000)
摘 要:Windows操作系统上,应用程序不能直接访 问设备,访 问要通过 内核中的设备驱动程序实
现。当系统中存在多种被控设备时,可采取一个主驱动程序控制其它设备驱动程序的方式,实现对多个
设备的统一、协调的控制。文章介绍了通过在内核中传递10请求包(IRP)的方式,实现设备驱动程序之
间的数据通讯的方法,该方法首先在 内存 中分配一个共享数据区,并将描述该共享区域的数据结构通过
IRP在驱动程序间传递,实现在驱动程序间的数据通讯。
关键词:内核;设备驱动程序;I/O请求包;共享;通讯
中图分类号 :TP31l 文献标识码 :A
内存映射文件 、互斥对象、信号量等方式实现,但对于运
引 言
行于 内核中的驱动程序,要实现相互之间的通讯 比较困
Windows操作系统限制了应用程序访问硬件设备的 难 。在操作系统 内核中,10管理器在接收到来 自用户
能力…,只有设备驱动程序才能访 问硬件设备,在工业 模式WIN32子系统的请求时,构造一个 IRP,并调用 Io-
控制系统中,有时主控计算机上可能接有多种不同的设 CallDriver函数 ,将 IRP发送给对应的驱动程序。驱动程
备。一般情况下,这些具有不同功能的硬件设备 由各 自 序运行于操作系统的内核模式下,它们的主要工作就是
的驱动程序控制,各驱动程序独立运行。比如在天然气 处理各种各样的IRP 。因此,实现通讯的一种方法是
气矿监测系统中,主控计算机上连接有管道 内监测车控 由主驱动程序构造一个 IRP,并调用函数 IoCallDriver将
制、监测车图像采集、站内气体浓度监测、报警系统、远 IRP发送给硬件设备驱动程序,驱动程序能在 IRP包中
程数据 GPRS模块、自动压井控制等多个硬件设备,这些 放入任意数据,甚至能将内核事件句柄也通过这种方式
系统有些通过 USB总线连接,有些通过PCI总线连接, 传送给另一个驱动程序。如果驱动程序之间的通讯发
各 自都有独立的驱动程序,有必要对它们进行统一、协 生的不频繁时,这种通过 IRP直接实现通讯的方法能够
调的控制管理 。如果在应用程序层次上进行控制 ,由于 工作 的很好 。
应用程序受操作系统线程调度机制的控制,无法进行实
1 IRP的构造与发送
时性较高的控制 。在这种情况下,要对这些硬件设备
进行统一、相互协调 的控制 ,就需要实现驱动程序之 间 I/0请求包 (IRP)是Windows操作系统中,I/O系统
的数据通讯。可以在系统中设计一个主驱动程序,它并 用来处理 I/O请求的数据结构 。当应用层的程序调
不直接控制具体的硬件设备,由它在内核模式下直接与 用 I/O服务时,I/O管理器就在内核中构造一个 IRP,该
其它硬件设备驱动程序通讯,完成对这些驱动程序的统 结构包含 I/0请求在系统中要进行的操作的相关信息。
一 控制。由于驱动程序工作于操作系统的内核模式,不 IRP是个大小可变的结构,在非分页内存池中分配,包括
受系统线程调度的制约,能够实
原创力文档

文档评论(0)