- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]第二章 Windows IO系统
DriverObject 指向驱动程序对象的指针。 NextDevice 指向设备对象列表中的下一个设备对象。 AttachedDevice 指向上一层设备对象。 CurrentIrp 在使用StartIo例程时,指向当前IRP结构。 * 简单的驱动程序开发 -重要的数据结构 DeviceExtension 指向设备扩展对象。 每个设备会指定一个设备扩展对象,设备扩展对象记录设备自己定义的信息。 DeviceType 设备的类型。 当实现虚拟设备时,应选择FILE_DEVICE_UNKNOWN类型的设备。 StackSize 在多层驱动程序结构中,会形成驱动程序堆栈(即IRP中包括多个栈单元),IRP会依次从最高层传递到最底层,StackSize指明设备对象在设备堆栈中的层数。 * * 设备扩展 设备对象记录通用的设备信息,而设备扩展结构中记录与设备相关的特殊信息,通常包括: 设备对象的反向指针 设备状态或驱动环境信息 中断对象指针 设备扩展是驱动程序专用的,其结构必须在驱动程序头文件中定义。 设备扩展通常用来保存下层的设备对象。 简单的驱动程序开发 -重要的数据结构 * Windows的驱动程序模型是层次结构的 垂直层次结构 水平层次结构 设备的垂直结构和水平结构可以构成Windows设备的树型结构。 简单的驱动程序开发 -设备的层次结构 * 驱动程序的垂直层次结构 通过分层结构,一个设备可以附加在另一个设备之上。 设备的创建顺序是 先创建底层PDO,再创建高层FDO; 即从底层设备到高层设备,中间可能夹杂着各种过滤型驱动程序。 设备对象由驱动程序创建,即每层设备对应着不同的驱动程序。 简单的驱动程序开发 -设备的层次结构 底层设备对象通过AttachedDevice来寻找上层设备对象 若设备的AttachedDevice指针为空,则说明已经是设备堆栈的顶部。 上层设备对象通过在设备扩展中记录低一层的设备对象,从而可以找到下一层的设备对象。 从最底层的设备对象到达设备堆栈顶部,再从设备堆栈顶部到达底部,均有相应的方法。 * 简单的驱动程序开发 -设备的层次结构 * 设备的垂直结构 简单的驱动程序开发 -设备的层次结构 * 驱动程序的水平层次结构 由同一驱动程序创建的设备对象之间具有水平层次关系。 在水平层次关系中,驱动程序创建第一个设备对象,每一个设备通过NextDevice指针指向下一个设备对象。 简单的驱动程序开发 -设备的层次结构 * 设备的水平结构 简单的驱动程序开发 -设备的层次结构 * WDK(Windows Driver Kit) 下载 /default.aspx WDK的build工具编译时需要两个文件 makefile SOURCES 简单的驱动程序开发 -驱动程序的编译和安装 * makefile文件 指定文件之间的相互依赖关系,确定项目中那些文件需要编译。 通常,驱动程序使用相同的makefile文件,WDK文档不建议用户修改makefile文件。 makefile文件中只包含一行语句: !INCLUDE $(NTMAKEENV)\makefile.def 简单的驱动程序开发 -驱动程序的编译和安装 Source文件 记录了需要编译的源文件名、包含目录路径、库目录路径等信息。 //目标驱动程序名称 TARGETNAME=HelloWDM //目标代码生成类别,DRIVER表示生成驱动程序, TARGETTYPE=DRIVER //目标代码生成路径 TARGETPATH=OBJ // 包含目录路径 INCLUDES=$(BASEDIR)\inc;$(BASEDIR)\inc\wdk; //该项目所有源文件 SOURCES=HelloWDM.c * 安装 WDM驱动程序的加载需要INF文件,INF文件描述了驱动程序安装的过程。 使用srvinstw.exe工具安装.sys驱动程序。 简单的驱动程序开发 -驱动程序的编译和安装 Windows中断优先级方案 Windows使用自己的中断优先级方案,称为中断请求级别(IRQL,Interrupt ReQuest Level)。 在x86系统中,内核在内部使用从0至31的数值来代表IRQL,数值越大,代表中断的优先级越高。 内核为软件中断定义了一组标准的IRQL; 而HAL则将硬件中断号映射为IRQL。 * Windows中断优先级方案 x86的中断请求级别(IRQL) * Windows中断优先级方案 中断是按优先级处理的,高优先级的中断会抢占低优先级中断的执行权。 当一个高优先级中断发生时,处理器将被中断线程的状态保存起来,并调用与该
文档评论(0)