网站大量收购闲置独家精品文档,联系QQ:2885784924

现代微机原理与接口技术.ppt

  1. 1、本文档共58页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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

文档评论(0)

策略培训库 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档