- 1、本文档共58页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 总线驱动程序检测到新的硬件 用户使用控制面板中的“添加新硬件”向导安装一个设备 PnP管理器为该设备和它的驱动程序在注册表的配置表中添加一些条目 PnP管理器可能需要调整已经分配给已存在设备的资源,使需要的资源对新设备可用 3. 设备驱动程序安装的顺序 硬件接入 PnP管理器创建PDO * 驱动程序被装入后,执行DriverEntry程序。来设置驱动程序中各个例程的入口地址 PnP管理器参照注册表中的信息查找与创建的PDO相关的过滤器和功能驱动程序 PnP管理器装入最底层的过滤器驱动程序并调用其AddDevice函数。该函数创建一个FiDO,从而在过滤器驱动程序和FiDO之间建立了水平连接 按照INF文件的指令安装驱动程序 * PnP管理器继续向上执行,依次装入并调用每个低层过滤器、功能驱动程序和每个高层过滤器,直到完成整个设备对象栈 AddDevice把PDO连接到FiDO上 PnP管理器给设备发送各种PnP IRP PnP管理器给发送“启动设备”PnP IRP告诉驱动程序已经给它分配了哪些资源 ,驱动程序使用这些资源分配启动它的设备 驱动程序处于等待处理IRP的状态 * 当应用程序因要向驱动程序提出各类请求(如读、写数据等)而调用相关函数的时候,就会使得I/O管理器创建一个I/O请求包(IRP)。 通常一个I/O请求包(IRP)先被送到设备对象栈的最上层驱动程序然后逐渐过滤到下面的驱动程序。每一层驱动程序都可以决定如何处理IRP,既可以直接处理完该IRP就不再向下传,也可以处理完后继续传递,还可以只做向下传递的工作。 当下层将请求处理完,返回的信息又通过该包的结构逐层向上传递。 4. IRP传递的顺序 46页 * I/O请求包(IRP)是驱动程序操作的中心,它是一个内核“对象”,是预先定义的数据结构,带有一组对它进行操作的I/O管理器程序。I/O管理器接收到一个I/O请求后,在把它传递到合适的驱动程序栈中的最高驱动程序之前,分配并初始化一个IRP。一个IRP有一个固定的首部和一个可变数目的I/O栈。 10.4.3 I/O请求包(IRP) * * 创建异步IRP的IoBuildAsynchronousFsdRequest 创建同步IRP的IoBuildSynchronous- FsdRequest 创建同步IRP_MJ_DEVICE_CONTROL或IRP_MJ_INTERNAL_DEVICE_CONTROL请求的IoBuildDeviceIoControlRequest 创建其他种类IRP的IoAllocateIrp 创建某些IRP的子IRP的IoMakeAssociatedIrp。 创建IRP的可以是I/O管理器,也可以是其他的驱动程序。能创建IRP的函数有: * 在创建一个IRP时,同时还创建了一个与之关联的IO_STACK_LOCATION结构数组,它是I/O栈中的一项,它包含的成员包括: MajorFunction(该IRP的主功能码) MinorFunction(该IRP的副功能码) Parameters(IRP参数) DeviceObject(与该栈单元对应的设备对象地址) FileObject(内核文件对象地址) CompletionRoutine(I/O完成程序地址) Context(任意的与上下文相关的值)。 * 在栈Parameters成员中,有几个常用的的参数: Create(IRP_MJ_CREATE请求,创建IRP) Close(IRP_MJ_CLOSE请求,关闭IRP) Read(IRP_MJ_READ请求,读IRP) Write(IRP_MJ_WRITE请求,写IRP) StartDevice(IRP_MJ_PNP的IRP_MN_START_DEVICE请求,启动设备) DeviceIOControl(IRP_MJ_IOCTL请求,IOCTL IRP)。 * 大部分参数可以和Win32函数对应起来 参数 Win32 API Creat CreateFile Read ReadFile Write WriteFile DeviceIOControl DeviceIoControl CloseHandle Close 返回 * 创建完IRP后,可以使用下面的代码做必要设置,并把IRP发送到设备驱动程序。 PDEVICE_OBJECT DeviceObject; //设备对象结构 PIO_STACK_LOCATION stack = IoGetNextIrpStackLocation(Irp); //获得该IRP第一个堆栈单元的指针 stack-MajorFu
您可能关注的文档
最近下载
- GB_T 42588-2023系统与软件工程 功能规模测量NESMA方法.docx VIP
- 祝由十三科 收藏珍本.pdf
- 高级英语第三课Ships-in-the-Desert名师优质课获奖市赛课一等奖课件.ppt VIP
- (新教材)人教版高中物理必修1第三章第5节《共点力的平衡》优质说课稿.doc
- 新冀教版数学一年级上册全册课件(2024年秋新教材).pptx
- 《化妆品配方与制备技术》课件——第10章 唇部美容化妆品.pptx VIP
- JBT 10491-2022 额定电压 450750V 及以下交联聚烯烃绝缘电线和电缆.docx
- 《化妆品配方与制备技术》课件——第1章 护肤化妆品.pptx VIP
- 山东服装职业学院综合类招聘考试真题.pdf
- 合伙经营分公司协议书(7篇).docx
文档评论(0)