`
camel2099
  • 浏览: 46083 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

两种不使用过滤驱动从驱动获取数据的方法

阅读更多
一直想写点技术文章的,但是每次想起这事的时候没时间,有时间的时候又提不起兴致J。

我们有时候需要从系统中某些驱动处理数据的方式,例如作一些过滤、对数据进行一些修改或者监视通过某个设备栈的数据等等。通常情况下是采用Filter Driver的方式实现。但是这样有种种局限性:容易暴露自己的存在、有些情况下可能不能再Detach掉,升级驱动的时候必须重启机器等等。

这里介绍两种通过HOOK方式截取数据的方法。

1、 Hook Dispatch例程。

首先通过ObReferenceObjectByName等函数拿到被Hook设备的DriverObject。有了这个之后,我们就可以用指向自己例程的指针改写MajorFunction数组里面的指针。



NTSTATUS ntStatus = STATUS_SUCCESS;

UNICODE_STRING wszDriverName;

PDRIVER_OBJECT pDriverObject = NULL;

PDRIVER_DISPATCH pOrgDispatch = NULL;

RtlInitUnicodeString( &wszDriverName, DRIVER_NAME);



ntStatus = ObReferenceObjectByName( &wszDriverName,

                  0,

                  NULL,

                  0,

                  *IoDriverObjectType,

                  //NULL,

                  KernelMode,

                  NULL,

                  (PVOID*)&pDriverObject);

if( !NT_SUCCESS(ntStatus))

{

                  DbgPrint( “ObReferenceObjectByName Fail.\r\n”);

                  return FALSE;

}

          pOrgDispatch = (PDRIVER_DISPATCH) InterlockedExchange( ( PLONG)&pDriverObject->MajorFunction[IRP_MJ_READ], (LONG)&DispatchMyRead);

          ……

卸载的时候同样这样修改回去即可。

这种方法比较方便,由于只需要改写一个函数指针,避免了inline hook的很多不稳定因素。另外,在调用原来的Dispatch例程的时候也只需要直接call它就行了。

但是,如果有些IRP不能立即完成的,例如键盘鼠标驱动的IRP,用这种方法就拿不到完成时候的数据了。因此我们还需要第二种方式J



2、 Hook Completion Routine。

在Hook掉的Dispatch里面,我们已经拿到了发到下层驱动的IRP。想在完成时再获得控制权,很简单,只需要再Hook掉Completion Routine。

NTSTATUS DispatchMyRead ( IN PDEVICE_OBJECT pDeviceObject, IN PIRP Irp)

{

         PIO_STACK_LOCATION irpSp = IoGetCurrentIrpStackLocation( Irp);



         //需要保存一下旧的完成例程信息

              g_RecentIrpInfo.ComplettionRoutine = irpSp->CompletionRoutine;

              g_RecentIrpInfo.Context = irpSp->Context;

              g_RecentIrpInfo.Control = irpSp->Control;

              g_RecentIrpInfo.irpSp = irpSp;



              //安装自己的完成例程

              irpSp->CompletionRoutine = MyIoCompletion;

              irpSp->Context = NULL;

              irpSp->Control = SL_INVOKE_ON_SUCCESS;   



(来自:码农源库,http://www.vcclass.net/wordpress/?p=339)
分享到:
评论

相关推荐

    磁盘过滤驱动完整工程

    1. **驱动模型理解**:理解KMDF(Kernel-Mode Driver Framework)或WDM(Windows Driver Model)驱动模型,它们是Windows平台上的两种主要驱动开发框架。KMDF更现代化,简化了驱动的编写,而WDM则更灵活,但复杂度较...

    串口驱动_串口驱动过滤_串口过滤_简单串口过滤驱动_

    简单串口过滤驱动通常由两部分组成:上滤驱动和下滤驱动。上滤驱动接收来自用户模式应用程序的I/O请求,对其进行处理(例如,添加日志、修改数据等),然后将经过处理的请求传递给下一个驱动(即系统串口驱动)。下...

    U盘过滤驱动应用程序

    总结,U盘过滤驱动是一种实用的技术,它可以用于数据保护、企业信息安全等领域。通过编写C++驱动程序,我们可以定制特定的设备行为,如将U盘设置为只读。然而,这也需要开发者具备深厚的系统编程知识和丰富的驱动...

    2个文件系统过滤驱动开发实例

    在IT行业中,文件系统过滤驱动(File System Filter Driver)是一种特殊的驱动程序,它在操作系统内核层拦截并处理文件系统操作。这种驱动通常用于增强或修改标准文件系统的行为,例如数据备份、加密、权限控制等。...

    Windows文件系统过滤驱动开发教程 2nd.zip

    由于文件系统过滤驱动的特殊地位,任何错误都可能导致严重的系统不稳定甚至数据丢失。因此,编写安全、可靠的驱动至关重要。教程将讨论如何遵循最佳实践,确保驱动的安全性和稳定性。 十、实战案例分析 教程可能...

    文件系统过滤驱动教程

    文件系统过滤驱动是一种特殊类型的驱动程序,它能够拦截和控制对文件系统的输入/输出(I/O)操作,如创建、读取、写入、重命名等文件操作。通过这些能力,开发者可以实现诸如反病毒保护、数据安全增强、备份机制以及...

    基于USB设备的过滤器驱动程序算法分析

    创建这两种过滤器驱动程序的机制基本相同,因为它们都有着与功能驱动程序类似的框架结构。过滤器驱动程序通过监视、拦截和修改IRP流的方式,可以在不改变现有驱动程序的基础上,方便地改进或增加现有驱动程序的功能...

    华溢收藏-Windows文件系统过滤驱动开发-谭文

    文件系统过滤驱动(File System Filter Driver)是一种运行在操作系统内核级别的软件组件,主要用于拦截和处理通过文件系统进行的读写操作。这种类型的驱动程序位于用户应用程序与底层存储设备之间,能够对文件系统...

    Windows文件系统过滤驱动开发教程和基于TDI的文件过滤驱动

    通过学习这两个教程,开发者可以掌握创建自定义文件系统过滤驱动和TDI过滤驱动的技术,从而能够设计出满足特定需求的解决方案,例如增强数据保护、优化文件访问性能或实现定制的网络策略。在实际应用中,这些技术...

    USB过滤驱动源码。

    过滤驱动则是USB驱动模型中的一种特殊类型,其主要任务是在设备与系统之间建立一个中介,实现对USB设备的特定控制或过滤。 在这个USB过滤驱动程序框架中,我们看到它基于DriverWorks生成。DriverWorks是一个专业...

    windows 文件系统过滤驱动教程与相关文档!!!

    2. **选择Driver Model**:Windows提供了两种模型:WDM(Windows Driver Model)和KMDF(Kernel-Mode Driver Framework)。KMDF更适合开发Filter Drivers,因为它提供了更高级别的抽象和错误处理机制。 3. **编写...

    磁盘过滤驱动源代码

    1. **驱动程序模型**:Windows驱动程序主要采用两种模型,即Windows NT驱动程序框架(WDF)和Windows驱动模型(WDM)。WDM适用于各种类型的驱动,包括磁盘过滤驱动。它允许驱动程序在系统内核模式下运行,从而可以...

    filemon文件过滤驱动源代码加注释

    文件过滤驱动(File System Filter Driver)是一种内核模式驱动程序,它可以在文件系统驱动之上,对文件系统的I/O请求进行处理。通过注册回调函数,文件过滤驱动可以拦截任何对文件或目录的操作,如打开、关闭、读取...

    ifs 过滤驱动开发 环境搭建和编译方法说明

    IFS(Installable File System)过滤驱动是Windows操作系统中用于文件系统操作的一种中间层,它允许开发者在文件系统和应用程序之间插入自定义逻辑,实现对文件系统操作的拦截和处理。本教程将详细介绍IFS过滤驱动的...

    文件系统过滤驱动开发教程.rar

    Windows提供了两种主要的文件系统过滤驱动模型:Legacy Filter Driver(传统过滤驱动)和Kernel-Mode Filter Driver(内核模式过滤驱动)。其中,Kernel-Mode Filter Driver通常使用FltMgr(Filter Manager)框架,...

    关于tooflat透明过滤驱动研究

    透明过滤驱动是一种特殊的驱动程序,它工作在文件系统层,对文件的读写操作进行拦截和处理,而不改变应用程序的原有行为。本主题聚焦于名为“tooflat”的透明过滤驱动,这对于那些从事文件透明加解密工作的人来说,...

    文件系统过滤驱动开发教程

    Windows提供两种主要的文件系统过滤驱动模型:文件系统迷你过滤驱动(Minifilter)和旧版的文件系统驱动(Filter Manager)。Minifilter模型是推荐的,因为它提供了更安全、更稳定的接口,并且有更好的扩展性。文件...

    Windows文件系统过滤驱动开发教程

    文件系统过滤驱动在Windows系统中起着至关重要的作用,它们允许开发者对文件系统操作进行拦截、修改或增强,以实现特定的功能,如数据保护、安全控制、备份和恢复等。 在Windows平台上,文件系统过滤驱动主要基于...

Global site tag (gtag.js) - Google Analytics