- 1、本文档共36页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
绑定 设备栈绑定的形式。驱动自己生成一个设备(过滤设备),调用系统提供的绑定API,绑定到目标设备上。并返回一个在未绑定之前目标设备所在设备栈的最顶层设备。这样发往下层的IRP或者发往上层的数据都会被过滤设备截获。 绑定API: IoAttachDevice() IoAttachDeviceToDeviceStackSafe(2000 SP4以及XP以上) IoAttachDeviceToDeviceStack() IoAttachDeviceToDeviceStack PDEVICE_OBJECT?? IoAttachDeviceToDeviceStack( ?IN?PDEVICE_OBJECT??SourceDevice, ?IN?PDEVICE_OBJECT??TargetDevice????); AttachedDevice需要记录在DEVICE_EXTENSION中,以便调用IoCallDriver()继续下发IRP 文件系统过滤框架 Filemon Sfilter Minifilter Filespy Sfilter总体流程 创建控制设备 创建控制设备符号链接 过滤分发函数 Fastio 过滤与绑定 生成一个过滤设备 IoRegisterFsRegistrationChange( DriverObject, SfFsNotification ); (文件系统设备绑定) SfFsControl (卷设备绑定) 一个驱动,看见几个文件系统设备,看见几个卷设备,对应每一个设备就生成相应设备附载上去,然后进行相应处理。 IoRegisterFsRegistrationChange FileMon里的方法: 枚举26个盘符,打开文件,获得FileObject?DeviceObject. 然后通过自己驱动生成一个过滤设备,Attach过滤设备到DeviceObject上 无法监控类似U盘等动态加载上去的 IoRegisterFsRegistrationChange动态获得 fastio 文件系统除了处理正常的IRP之外,还要处理所谓的FastIo. FastIo是Cache Manager调用所引发的一种没有irp的请求。换句话说,除了正常的Dispatch Functions之外,你还得为DriverObject撰写另一组Fast Io Functions. 这组函数的指针在driver-FastIoDispatch Sfilter代码通读分析 DriverEntry sfCreate 再次深入理解IRP 过滤驱动与IRP处理方式 a.Pending完成例程 IoCopyCurrentIrpStackLocationToNext b.忽略直接下发 IoSkipCurrentIrpStackLocation,下层设备拿到的IO_STACKLOCATION 和当前的一样 c.结束IRP不下发 PIO_STACK_LOCATION irpStack = IoGetCurrentIrpStackLocation (Irp); Irp-IoStatus.Status = STATUS_SUCCESS; Irp-IoStatus.Information = 0; IoCompleteRequest( Irp, IO_NO_INCREMENT ); d.手动构建IRP IoAllocateIrp IoGetNextIrpStackLocation IRP注意事项 在驱动程序将IRP 传递个下一个驱动之后,就不再拥有这个IRP,并且不能试图再去访问它。否则会导致系统崩溃。那个IRP 会被其它的驱动或者线程释放或完成。如果驱动需要访问一个已经在栈里传下去的IRP,这个驱动必须实现并设置IoCompletion 例程。当I/O管理器调用IoCompletion 例程时,这个驱动就能够在IoCompletion 例程执行期间重新获得对这一IRP 的所有权。如此,IoCompletion 例程就能够访问IRP 中的域。 若是驱动的分发例程也还须在IRP 被后面的驱动处理完成之后再处理它,这个IoCompletion例程必须返STATUS_MORE_PROCESSING_REQUIRED,以将IRP 的所有权返回给分发例程。如此一来,I/O 管理器会停止IRP 的处理,将最终完成IRP 的任务留给分发例程。分发例程能够在之后调用ICompleteRequest 来完成这个IRP,或者还能将这个IRP 标记为等候进一步处理。 Pending完成例程 KEVENT event; KeInitializeEvent(event, NotificationEvent, FALSE); IoCopyCurrentIrpStackLo
您可能关注的文档
- 第十一章 密闭容器内作业指导书-提交 3.doc
- 第一章 00C++重点知识回顾.ppt
- 十五分钟介绍 Redis数据结构解析.pdf
- 发育和分化的机制.ppt
- 解读种猪良种登记与性能测定技术要求.pdf
- 数据库新技术发展要领.ppt
- 财政透明度_信息分配_权利博弈和实现路径.pdf
- 等额本息还款法是在贷款期限内每月以相等的还款额足额偿还贷款本金及利息的方法.doc
- 第二篇PHP的基本语法.ppt
- 第十三章 潘爱民COM课件15.ppt
- 四川省德阳市罗江中学2025届高三考前热身化学试卷含解析.doc
- 山东省枣庄现代实验学校2025届高三下学期第五次调研考试化学试题含解析.doc
- 吉林省长春市十一高中等九校教育联盟2025届高三一诊考试生物试卷含解析.doc
- 2025届江苏省盐城市伍佑中学高考仿真模拟化学试卷含解析.doc
- 2025届广西贺州中学高考冲刺押题(最后一卷)生物试卷含解析.doc
- 安徽省池州市贵池区2025届高三第一次模拟考试生物试卷含解析.doc
- 宁夏银川一中2025届高三(最后冲刺)化学试卷含解析.doc
- 广东省广州市增城区四校联考2025届高考压轴卷化学试卷含解析.doc
- 2025届邯郸市第一中学高考生物必刷试卷含解析.doc
- 2025届安徽省安庆市石化第一中学高考仿真卷化学试卷含解析.doc
文档评论(0)