WDM驱动程序设计
I/O请求包(IRP)
IRP的总体结构
Windows操作系统使用一种称为I/O请求包(IRP)的数据结构与内核模式驱动程序通信.Windows驱动程序中几乎所有的I/O操作都是包驱动的.
一个I/O请求包由一个IRP首部加一系列的栈单元组成.每个栈单元是一个IO_SATCK_LOCATION结构.
IRP首部
栈单元1
栈单元2
栈单元3
… …
当前栈单元
驱动程序栈与I/O栈单元之间的关系
栈单元数组(I/O堆栈)中的每个堆栈单元都对应一个将处理该IRP的驱动程序.
IRP首部的结构
IRP首部的重要字段
MdlAddress(PMDL):指向一个内存描述符表(MDL),它描述了一个与该请求关联的用户模式缓冲区.在驱动程序与用户模式程序之间利用"直接I/O方式"进行通信时,驱动程序利用该字段访问用户模式的虚拟内存.
AssociatedIrp:是一个三指针联合(union).其中,与NT式驱动程序相关的指针是AssociatedIrp.SystemBuffer. SystemBuffer指针指向一个数据缓冲区,该缓冲区位于内核模式的非分页内存中.在驱动程序与用户模式程序之间利用"缓冲I/O方式"进行通信时,驱动程序利用该缓冲区输入输出数据.I/O管理器会自动将用户模式缓冲区中的数据复制到SystemBuffer缓冲区,或者自动将SystemBuffer缓冲区中的数据复制到用户模式缓冲区.
IRP首部的重要字段
IoStatus(IO_STATUS_BLOCK):是一个仅包含两个域的结构,驱动程序在最终完成请求时设置这个结构.IoStatus.Status域将收到一个NTSTATUS代码,而IoStatus.Information的类型为ULONG_PTR,它将收到一个信息值,该信息值的确切含义要取决于具体的IRP类型和请求完成的状态.
IoStatus.Information域的一个公认用法是用于保存数据传输操作,如IRP_MJ_READ,的流量总计.某些PnP请求把这个域作为指向另外一个结构的指针,这个结构通常包含查询请求的结果.
RequestorMode:是一个枚举常量,取值为UserMode或KernelMode,指定IRP的最初来源.驱动程序有时需要查看这个值来决定是否要信任某些参数.
IRP首部的重要字段
PendingReturned(BOOLEAN):如果为TRUE,则表明处理该IRP的低级派遣例程返回了STATUS_PENDING.完成例程通过参考该域来避免自己与派遣例程间的潜在竞争.
Cancel(BOOLEAN):如果为TRUE,则表明内核服务函数IoCancelIrp已被某个程序实体在该IRP所调用,该函数用于取消这个IRP.如果为FALSE,则表明没有被取消.
CancelIrql(KIRQL):是一个IRQL值,表明那个专用的取消自旋锁是在这个IRQL上获取的.当在取消例程中释放自旋锁时应参考这个域.
CancelRoutine(PDRIVER_CANCEL):是一个回调函数指针,指向取消例程.在取消某个IRP时,取消例程会被自动调用.应该使用IoSetCancelRoutine函数设置这个域而不是直接修改该域.
IRP首部的重要字段
UserBuffer(PVOID) :对于METHOD_NEITHER方式的IRP_MJ_DEVICE_CONTROL请求,该域用于保存读写请求缓冲区的用户模式虚拟地址 .
Tail:是一个联合,其结构如下所示:
IRP首部的重要字段
CurrentLocation (CHAR):当前栈单元在数组中的索引.
Tail.Overlay.CurrentStackLocation(PIO_STACK_LOCATION):指向当前栈单元的指针.一般不在驱动程序中直接访问这两个字段,可以使用象IoGetCurrentIrpStackLocation这样的函数获取这些信息.
IO_STACK_LOCATION的结构
栈单元的重要字段
MajorFunction(UCHAR):表示该IRP的主功能码.这个代码应该为类似IRP_MJ_READ一样的值,并与驱动程序对象中MajorFunction表的某个派遣函数指针相对应.
MinorFunction(UCHAR):表示该IRP的副功能码.它进一步指出该IRP属于哪个主功能类.例如,IRP_MJ_PNP请求就有很多的副功能码,如IRP_MN_START_DEVICE,IRP_MN_REMOVE_DEVICE,等等.
- 映泰主板驱动 > WDM驱动程序设计
-
WDM驱动程序设计
下载该文档 文档格式:PPT 更新时间:2009-11-01 下载次数:0 点击次数:1文档基本属性 文档语言: 文档格式: ppt 文档作者: lilh 关键词: 主题: 备注: 点击这里显示更多文档属性 经理: 单位: mti 分类: 创建时间: 上次保存者: asus 修订次数: 932 编辑时间: 文档创建者: 修订: 加密标识: 幻灯片: 21 段落数: 144 字节数: 64265 备注: 0 演示格式: 在屏幕上显示 上次保存时间:
- 下载地址 (推荐使用迅雷下载地址,速度快,支持断点续传)
- PPT格式下载
- 更多文档...
-
上一篇:一种数据驱动的wrapper 自动生成与维护方法
下一篇:Advisory/Consultancy
点击查看更多关于映泰主板驱动的相关文档
- 您可能感兴趣的
- 映泰主板驱动下载 映泰主板驱动包 映泰主板网卡驱动下载 映泰主板声卡驱动 映泰p31a7主板驱动 映泰h61主板网卡驱动 主板映泰a785ge驱动 映泰主板h61主板驱动 映泰880g主板驱动下载
- 大家在找
-
- · linux基本操作
- · 矿大北京研究生院
- · 新概念第四册mp3英音
- · 步进电机脉冲发生电路
- · erp实训报告coo3000字
- · 3dmax2009英文版汉化
- · canyoufeei
- · 湖南监理英才网
- · 关于审计风险的防范
- · cnc车床技术员
- · 长春东方学院
- · 电动车后刹车
- · 餐厅服务员管理制度
- · 英语托业考试
- · 2011年一级建造师
- · 美国谷轮制冷压缩机
- · 广州北方汽修专修学校
- · 社会学概论论文
- · 钳工划线的常用工具
- · 炫舞aa支持2.0.8版
- · 坏账准备冲回会计分录
- · 防雷装置检测情况简表
- · 成都计算机培训学校
- · kan300.com
- · 湖北襄樊职业技术学院
- · 问道注册资料怎么改
- · 山西焦煤集团网站
- · 足球之夜20120517录像
- · 工程造价员考试时间
- · ppt网页
- 赞助商链接