文档库 最新最全的文档下载
当前位置:文档库 › Windows文件系统过滤驱动开发教程(第二版)

Windows文件系统过滤驱动开发教程(第二版)

Windows文件系统过滤驱动开发教程(第二版)
Windows文件系统过滤驱动开发教程(第二版)

windows驱动开发和调试环境搭建

Windows驱动开发和环境搭建 【文章标题】: Windows驱动开发和调试的环境设置 【文章作者】: haikerenwu 【使用工具】: VC6.0,VMware6.0.3,Windbg 【电脑配置】: 惠普笔记本xp sp3 (一)VMWare安装篇 VMWare的安装一路Next即可,关于其序列号,百度一下就能找到,虚拟机安装完成之后,需要安装操作系统,我在虚拟机中安装的是windows xp sp2系统。 点击“文件”----“新建”----“虚拟机” 进入新建虚拟机的向导,配置虚拟系统参数

选择虚拟系统文件的兼容格式(新手推荐选择默认选项) 按照默认设置继续点击下一步,选择好您需要的操作系统,此处我选择的是Windows XP Prefessional。 设置虚拟机名称和虚拟操作系统安装路径,我单独空出来一个F 盘,将虚拟机和虚拟操作系统全部装在该盘。

配置网络模式(推荐选择NA T,一般主机不用做任何的设置虚拟机就可以利用主机上网)。 配置虚拟磁盘的容量。在这里可以直接单击完成,来完成基本操作设置,磁盘默认空间是8GB,用户可以根据自己的实际使用情况来调整大小,也可以自定义分区。

操作完成之后,在“VM”菜单下有个“setting。。。”菜单,点击此菜单,在CD-ROM中选择合适的选项,我使用的是Use ISO image 选项,将我的xp sp2操作系统的ISO映像路径设置好,安装操作系统。点击ok之后,启动虚拟机,即开始安装操作系统,安装过程跟普通装机过程相同。安装完成之后,启动操作系统,然后在VM菜单下点击“Install VMWare Tools”,把虚拟操作系统的驱动装好。 (二)VMWare设置篇

Windows文件系统过滤驱动在防病毒方面的应用

Windows文件系统过滤驱动在防病毒方面的应用 发表时间:2009-10-1 刘伟胡平来源:万方数据 关键字:文件系统过滤驱动防病毒病毒特征码信息安全 信息化应用调查我要找茬在线投稿加入收藏发表评论好文推荐打印文本 在操作系统内核层,对用户模式应用程序请求读写的磁盘数据进行病毒扫描。介绍文件系统过滤驱动的工作原理,利用文件系统过滤驱动,捕获用户应用程序发往目标文件系统驱动的磁盘操作请求,进而获得这些操作请求的处理权,论述防病毒的工作原理,利用文件扫描程序扫描文件系统过滤驱动程序截获的文件数据,并与特征码库中的病毒特征码进行匹配。若匹配成功,则通知用户模式应用程序进行处理;否则,不做处理,防止从磁盘读取病毒文件或将病毒文件写入磁盘。 0 引言 近几年计算机病毒也正以惊人地速度蔓延,对计算机及其网络系统的安全构成严重威胁。本文提出利用文件系统过滤驱动,捕获用户应用程序向磁盘写入或读出的文件数据,对其进行扫描,并与病毒特征码库中的病毒特征码匹配,以判断是否是病毒文件或染毒文件:根据扫描结果确定是否为病毒文件或染毒文件,以及是否与用户模式应用程序进行通信。文件系统过滤驱动运行于操作系统内核,其安全性得到操作系统的保证,安全性较高。 1 文件系统过滤驱动原理 文件系统过滤驱动是针对文件系统而言的,属于内核模式程序,运行于操作系统的内核模式,仅能附着到目标文件系统驱动的上层。文件系统驱动是存储管理子系统的一个组件,为用户提供多种手段,将信息存储到永久介质(如磁盘、磁带等),或从永久介质获取信息。图1显示了文件系统过滤驱动和文件系统驱动与用户应用程序之间的服务关系,应用程序对磁盘发出的操作请求,首先到达 I/O子系统管理器。在进行读写磁盘数据的时候,缓存管理器会保存最近的磁盘存取记录,所以在接收到应用程序读写磁盘的操作请求后,I/O子系统管理器会先检查所访问的数据是否保存在缓存中,若缓存中有要访问的数据,I/O子系统管理器会构造Fast I/O请求包,从缓存中直接存取数据;如果所需数据不在缓存中,I/O子系统管理器会构造相应的IRP,然后发往文件系统驱动,同时缓存管理器会保存相应的记录。因此,文件系统过滤驱动程序有两组接口处理由I/O子系统管理器发送来的用户模式应用程序操作请求:一组是普通的处理IRP的分发函数;另一组是FastIo调函数;编写这两组函数也是文件系统过滤驱动的主要任务之一。 图1文件过滤系统原理 2 文件系统过滤驱动关键部分实现过程 虽然文件系统过滤驱动有FastIo回调函数和IRP分发函数两组接口处理I/O请求;但是,只有IRP请求是从磁盘读取数据;因此,只要捕获与读写请求相应的IRP请求,就可获得对读写数据的处理。读写IRP请求分别是IRP_MJ_READ和IRP_MJ_WRITE请求;只有将文

Windows驱动开发培训

Windows驱动开发培训 培训流程: 一、基础知识 在开始驱动开发之前,您应该知道操作系统原理以及驱动程序是如何在操作系统中进行工作的,了解这些基本原理将有助于您做出正确的设计决策并简化您的开发过程。 1、了解Windows操作系统构造\\ 可以链接进去 2、安装WDK,参考相关文档,熟悉WDK的内容\\ 可以链接进去 二、Windows驱动开发\\ 可以链接进去 一、基础知识 在开始驱动开发之前,您应该知道操作系统原理以及驱动程序是如何在操作系统中进行工作的,了解这些基本原理将有助于您做出正确的设计决策并简化您的开发过程。 1、了解Windows操作系统构造 (1)培训目标 深入了解Windows操作系统的系统结构以及工作原理 (2)培训内容 阅读书籍《深入解析Windows操作系统》的第3、4、6、7、9章,重点关注第九章“I/O系统” (3)培训任务 ①掌握Windows操作系统的系统结构 ②理解ISR、IRP、IRQL、DCP等概念的含义 ③了解注册表的用法,掌握注册表数据的查看和修改方法 ④了解进程和线程的内部机理以及线程的调度策略 ⑤了解I/O系统的内容,理解I/O请求以及I/O处理过程 注:以上相关内容,请在一周内完成。

2、安装WDK,参考相关文档,熟悉WDK的内容 (1)培训目标 了解WDK的安装过程,熟悉WDK的编译环境,掌握如何使用WDK的相关帮助文档;了解WDM驱动程序的基本结构 (2)培训内容 ①.阅读文档\\10.151.131.12\book\windows\MSWDM.chm,掌握WDM驱动程序的基本结构以及基本的编程技术。 ②.参考WDK的帮助文档:WDK documentation ,了解WDK的基本内容 (3)培训任务 ①理解分层驱动结构的含义,掌握设备和驱动程序的层次结构 ②理解“驱动对象”和“设备对象”的概念 ③理解2个基本例程:DriverEntry 和addDevice ④了解IRP的结构以及IRP处理的流程 ⑤初步了解I/O的控制操作 注:以上相关内容,请在一周内完成。 二、Windows驱动开发 学习如何基于WDK进行驱动程序的开发 1、培训目标 (1)学会根据WDK开发一个基本的Windows驱动程序和测试程序 (2)学会利用不同的IOCTL方式在内核模式和用户模式之间进行通讯 (3)学会如何在内核模式下和用户模式下访问注册表 (4)利用WinDbg跟踪程序,学会使用WinDbg进行调试 2、培训内容 (1)阅读\src\general\ioctl中的示例代码 (2)build并运行应用程序和驱动程序

文件过滤驱动加载过程

文件过滤驱动学习笔记(二) 1.概述 刚学习文件系统过滤时只是做一些简单的应用也没有深究其中的细节;说起来对文件系统过滤也只是一知半解惭愧的很。后与人讨论发现很多细节自己很模糊;比如其中涉及的驱动对象之间的区别、卷设备加载对文件过滤驱动的影响等。自己还是需要仔细研究一下,最近查了一些官方及前辈们的资料似乎有些理解在此记录下来做个笔记。 2.相关对象说明 在文件过滤驱动学习中会遇到几种设备对象总是混淆。最近硬着头皮查阅DDK才有些理解。 2.1.存储设备(Storage Device) 存储设备可以理解为一个磁盘、一个CD;它可以物理的也可以是逻辑的,它上边可以有一个或多个卷设备对象。大多数存储设备是一个PnP设备,它们由PnP管理器加载。存储设备表现为PnP设备树(PnP Device Tree)上的一个节。注意:文件系统驱动和文件系统过滤驱动都不是PnP设备驱动。 2.2.存储卷(Storage Volume) 存储卷是一个存储设备如固定磁盘,软盘,CD盘,格式化后存储的目录与文件。一个很的大卷可以被分成一个或多个逻辑卷;每一个卷都会被格式化成指定的一种格式,如NTFS,FA T等。它通常是一个物理设备对像(PDO)。它与文件系统卷对象是不同的。2.3.文件系统卷设备对象(File System VDO) 一个存储卷被文件系统加载时就会产生一个文件系统卷设备对像(File System VDO);它总是与指定的逻辑或物理设备相联结(这里我理解应该是说它总是代表了一种数据存储及组织格式,也就是我们常说的FA T和NTFS)。文件系统过滤驱动就是要附加到这种设备对象上过滤读写相关的操作。DDK上说文件系统卷设备对象是不需要命名的,因为给它命名会带来安全隐患;这点没有太理解还需要再查阅一些资料。 2.4.文件系统控制设备对象(File System CDO ) 文件系统控制设备对象是一个文件系统的入口,它不是单个的卷并且它是存储在全局文件系统队列里的。一个文件系统驱动在入口创建一个或多个CDO,例如FastFat就创建两个CDO。一个是针对固定媒体一个针对可移动媒体。CDFS只创建一个因为它只有一个移动媒体。文件系统控制设备对象是文件系统过滤驱动要过滤的另一个重要对象,因为在卷加载时会发一个消息给文件系统驱动,需要知道有新的卷加载安装就需要对这个设备对象进行过滤。这个对象的作用我理解为是用来管理文件系统卷设备对象的。 3.加载过程 3.1.OS启动时的加载 3.1.1.OS的加载过程中的文件系统

浅谈文件系统过滤驱动

浅谈文件系统过滤驱动讲稿 大家好: 今天我们一起来认识一下文件系统过滤驱动(File System Filter Driver),当今信息化建设日益推进,电子化办公日趋流行,文件的安全性已成为信息安全领域的重要课题之一。目前解决这个问题的主要技术手段有两种: 一是利用应用层HOOK(钩子)技术。 主要是对windows提供的文件操作函数(API)及由文件操作所触发的windows消息进行HOOK,经过适当的处理达到预期目的。 二是开发文件系统过滤驱动程序。 在内核中间层过滤I/O管理派发的I/O请求包IRP(I/O Request Package)。 做简单介绍后,我就从文件系统过滤驱动的定义、原理、应用和前景四个方面开始今天的主题。 谈到文件系统过滤驱动,不得不谈谈文件系统驱动。文件系统驱动是存储管理子系统的一个重要组成部分,它向用户提供在磁盘或光盘等非易失性媒介上信息的存储、转发,同时和存储管理器、高速缓冲管理器紧密结合,不但保证了应用程序可以准确地提取数据文件的内容,而且提高了访问效率。直观点:由截图可知,我们平时用的SD卡、U盘等是FAT、FAT32格式,它们所对应的文件系统驱动则是fastfat.sys、exfat.sys等,硬盘则是NTFS格式,所对应的文件系统驱动是ntfs.sys 它们到底怎么工作的呢?用户进程对磁盘上文件的创建、打开、读、写等操作由WIN 32子系统调用相应的服务来代表该进程发出请求操作。I/O管理器接收到上层传来的I/O请求,应用程序对磁盘发出的操作请求,首先到达 I/O子系统管理器。在进行读写磁盘数据的时候,缓存管理器会保存最近的磁盘存取记录,所以在接收到应用程序读写磁盘的操作请求后,I/O子系统管理器会先检查所访问的数据是否保存在缓存中,若缓存中有要访问的数据,I/O子系统管理器会构造Fast I/O请求包,从缓存中直接存取数据;如果所需数据不在缓存中,I/O子系统管理器会构造相应的IRP(I/O Request Package),然后发往文件系统驱动,同时缓存管理器会保存相应的记录。因此,文件系统过滤驱动程序有两组接口处理由I /O子系统管理器发送来的用户模式应用程序操作请求:一组是普通的处理IRP的分发函数;另一组是FastIo调函数;通过构造输入输出请求包IRP来描述这个请求,然后向下传递给文件系统驱动、存储设备驱动做后续处理,低层驱动处理完毕后把结果依次向上返回,最后经过I/O管理器,由WIN 32子系统把结果返回给发出请求的应用进程,整个对文件的操作请求执行完毕。 Windows NT 的I/O 管理器是可扩展结构,支持分层驱动模型,这样按照我们的需求开发具有某种功

Windows驱动开发入门

接触windows驱动开发有一个月了,感觉Windows驱动编程并不像传说中的那么神秘。为了更好地为以后的学习打下基础,记录下来这些学习心得,也为像跟我一样致力于驱动开发却苦于没有门路的菜鸟朋友们抛个砖,引个玉。 我的开发环境:Windows xp 主机+ VMW ARE虚拟机(windows 2003 server系统)。编译环境:WinDDK6001.18002。代码编辑工具:SourceInsight。IDE:VS2005/VC6.0。调试工具:WinDBG,DbgView.exe, SRVINSTW.EXE 上面所有工具均来自互联网。 对于初学者,DbgView.exe和SRVINSTW.EXE是非常简单有用的两个工具,一定要装上。前者用于查看日志信息,后者用于加载驱动。 下面从最简单的helloworld说起吧。Follow me。 驱动程序的入口函数叫做DriverEntry(PDRIVER_OBJECT pDriverObj,PUNICODE_STRING pRegisgryString)。两个参数,一个是驱动对象,代表该驱动程序;另一个跟注册表相关,是驱动程序在注册表中的服务名,暂时不用管它。DriverEntry 类似于C语言中的main函数。它跟main的差别就是,main完全按照顺序调用的方法执行,所有东西都按照程序员预先设定的顺序依次发生;而DriverEntry则有它自己的规则,程序员只需要填写各个子例程,至于何时调用,谁先调,由操作系统决定。我想这主要是因为驱动偏底层,而底层与硬件打交道,硬件很多都是通过中断来与操作系统通信,中断的话就比较随机了。但到了上层应用程序,我们是看不到中断的影子的。说到中断,驱动程序中可以人为添加软中断,__asm int 3或者Int_3();前者是32位操作系统用的,后者是64位用的。64位驱动不允许内嵌汇编。下面是我的一个helloworld的源码:

操作系统与驱动开发试题

河北科技大学硕士学位研究生 2014——2015学年第1学期 《操作系统与驱动开发》课程期末考试试卷 学院信息学院专业电路与系统姓名程莉学号 2201414007 题号一二三四五六总分 得分 一.单项选择题(每小题1分,共10分) 1.操作系统的 D 管理部分负责对进程进行调度。 A.主存储器 B.控制器 C.运算器 D.处理机 2.分时操作系统通常采用 B 策略为用户服务。 A.可靠性和灵活性 B.时间片轮转 C.时间片加权分配 D.短作业优先 3.很好地解决了“零头”问题的存储管理方法是 A 。 A 页式存储管理 B 段式存储管理 C 多重分区管理 D 可变式分区管理 4.用WAIT、SIGNAL操作管理临界区时,信号量的初值应定义为 B 。 A.-1 B.0 C.1 D.任意值 5.在进程管理中,当 C 时,进程从阻塞状态变为就绪状态。 A.进程被进程调度程序选中 B.等待某一事件 C.等待的事件发生 D.时间片用完 6.某系统中有3个并发进程,都需要同类资源4个,试问该系统不会发生死锁的最少资源数 B 。 A.9 B.10 C.11 D.12 7.虚拟存储器管理系统的基础是程序的 B 理论。 A.全局性 B.局部性 C. 动态性 D.虚拟性 8.从用户的角度看,引入文件系统的主要目的是 D A.实现虚拟存储 B.保存系统文档

C.保存用户和系统文档 D.实现对文件的按名存取 9.操作系统中采用多道程序设计技术提高CPU和外部设备的 A A.利用率 B.可靠性 C.稳定性 D.兼容性 10.缓冲技术中缓冲池在 C 中。 A.主存 B. 外存 C. ROM D. 时间片轮转 二.填空(每空0.5分,共15分)。 11.进程存在的唯一标志是PCB 。 12.通常进程实体是由程序块、进程控制块和数据块三部分组成。 13.磁盘访问时间由寻道时间、旋转延迟时间和传输时间组成。 14.作业调度是从后备作业队列中选一些作业,为它们分配资源,并为它们创建进程。 15.文件的物理组织有顺序、链接和索引。 16.若一个进程已经进入临界区,则其它欲要进入临界区的进程必须___等待____。 17.信号量的物理意义是,当信号量值大于零时其值表示可分配资源的个数;当信号 量值小于零时,其绝对值表示等待使用该资源的进程的个数。 18.静态重定位在程序装入时进行; 而动态重定位在程序运行时进行。 19.分区管理中采用“最佳适应”分配算法时,宜把空闲区按长度递增次序登记在空闲 区表中。 20.所谓系统调用,就是用户在程序中调用操作系统所提供的一些子功能。 21.把逻辑地址映射为物理地址的工作称为地址映射。 22.设备管理中采用的数据结构有设备控制表、控制器控制表、通道控制表、 系统设备表等四种。 23.从资源管理(分配)的角度,I/O设备可分为独占设备、共享设备和虚 拟设备三种。 24.设备与控制器之间的接口信号主要包括数据、状态和控制。 25.DMA控制器由三部分组成,分别为主机与DMA控制器的接口、 DMA控制器与块设备的接 口和 I/O控制逻辑。 三.名词解释(每小题2.5分,共10分)。 26.虚拟存储器 答:虚拟存储器是指在具有层次结构存储器的计算机系统中,自动实现部分装入和部分替换功能,能从逻辑上为用户提供一个比物理贮存容量大得多,可寻址的“主存储器”。

文件过滤的一点总结

文件系统驱动 文件系统驱动主要生成两类设备:文件系统控制设备,文件系统的卷设备 文件系统控制设备:主要任务是修改整个驱动的内部配置 文件系统的卷设备:一个卷对应一个逻辑盘 发送给控制设备的请求(IRP),一般是文件系统控制IRP(主功能号为IRP_MJ_FILE_SYSTEM_CONTROL);发送给卷设备的IRP一般则是文件操作IRP。过滤的目标最终是为了得到文件操作的IRP,但是控制设备的IRP,一般用来捕获卷设备的生成信息,所以我们要先绑定文件系统的控制设备,达到绑定文件系统的卷设备的目的~~ (1)生成自己的一个控制设备,当然必须给控制设备指定名称 (2)设置普通分发函数 (3)设置快速IO分发函数 (4)编写一个文件系统变动回调函数,在其中绑定刚激活的文件系统控制设备(动态绑定) (5)使用IoRegisterFsRegistrationChange调用注册这个回调函数 文件系统控制设备的绑定 过滤设备扩展 typedef struct _SFILTER_DEVICE_EXTENSION { ULONG TypeFlag; // // 绑定的文件系统设备(真实设备) // PDEVICE_OBJECT AttachedToDeviceObject; // // 与文件系统设备相关的真实设备(磁盘),这个在绑定时使用 // // PDEVICE_OBJECT StorageStackDeviceObject; // // // 如果绑定了一个卷,那么这是物理磁盘卷名;否则这是绑定的控制设备名 // //

UNICODE_STRING DeviceName; // // 用来保存名字字符串的缓冲区 // WCHAR DeviceNameBuffer[MAX_DEVNAME_LENGTH]; // // The extension used by other user. // UCHAR UserExtension[1]; } SFILTER_DEVICE_EXTENSION, *PSFILTER_DEVICE_EXTENSION; 绑定文件系统控制设备 SfAttachToFileSystemDevice 文件系统控制设备已经被绑定,绑定的目的是为了获得发送给文件系统控制设备的文件系统控制请求。这些IRP的主功能号是IRP_MJ_FILE_SYSTEM_CONTROL,每个主功能号下一般都有次功能号 从这些控制IRP中能得到足够的信息,确定一个卷被挂载,这样才有可能去绑定文件系统的卷设备 当有卷被挂载或解挂载时,SfFsControl()就会被系统回调。现在的任务是在这个函数中获得卷设备的相关信息并对它实行绑定,才能捕获各种针对文件的IRP,从而获得临控各种文件操作的能力 主功能号为IRP_MJ_FILE_SYSTEM_CONTROL时,有以下几个不同次功能号的IRP要处理(1)次功能号为IRP_MN_MOUNT_VOLUME,说明一个卷被挂载,应该调用SfFsControlMountVolume来绑定一个卷 (2)次功能号为IRP_MN_LOAD_FILE_SYSTEM,这个请求比较特殊,它一般出现在文件系统识别器要求加载真正的文件系统时,此时说明前面绑定了一个文件系统识别器,现在应该在这里开始绑定真正的文件系统控制设备了 (3)次功能号为IRP_MN_USER_FS_REQUEST,此时可以从irpSp->Parameters.FileSystemControl.FsControlCode得到一个控制码。当控制码为FSCTL_DISMOUNT_VOLUME时,说明是一个磁盘在解挂载 (1)生成一个控制设备。当然此前必须给控制设备指定名称 (2)设置分发函数和快速IO分发函数 (3)编写一个文件系统变动回调函数,在其中绑定刚激活的文件系统的控制设备,并注册这

Windows驱动程序开发环境配置

Windows驱动程序开发笔记 一、WDK与DDK环境 最新版的WDK 微软已经不提供下载了这里:https://https://www.wendangku.net/doc/5b5259165.html,/ 可以下并且这里有好多好东东! 不要走进一个误区:下最新版的就好,虽然最新版是Windows Driver Kit (WDK) 7_0_0,支持windows7,vista 2003 xp等但是它的意思是指在windows7操作系统下安装能编写针对windows xp vista的驱动程序, 但是不能在xp 2003环境下安装Windows Driver Kit (WDK) 7_0_0这个高版本,否则你在build的时候会有好多好多的问题. 上文build指:首先安装好WDK/DDK,然后进入"开始"->"所有程序"->"Windows Driver Kits"->"WDK XXXX.XXXX.X" ->"Windows XP"->"x86 Checked Build Environment"在弹出来的命令行窗口中输入"Build",让它自动生成所需要的库 如果你是要给xp下的开发环境还是老老实实的找针对xp的老版DDK吧,并且xp无WDK 版只有DDK版build自己的demo 有个常见问题: 'jvc' 不是内部或外部命令,也不是可运行的程序。 解决办法:去掉build路径中的空格。 二、下载 WDK 开发包的步骤 1、访问Microsoft Connect Web site站点 2、使用微软 Passport 账户登录站点 3、登录进入之后,点击站点目录链接 4、在左侧的类别列表中选择开发人员工具,在右侧打开的类别:开发人员工具目录中找到Windows Driver Kit (WDK) and Windows Driver Framework (WDF)并添加到您的控制面板中 5、添加该项完毕后,选择您的控制面板,就可以看到新添加进来的项了。 6、点击Windows Driver Kit (WDK) and Windows Driver Framework (WDF),看到下面有下载链接,OK,下载开始。下载后的文件名为: 6.1.6001.18002.081017-1400_wdksp-WDK18002SP_EN_DVD.iso将近600M大小。

WINDOWS驱动编程

WDM驱动程序开发之读写设备寄存器:KIoRange类 2009-11-09 14:05 WDM驱动程序开发之读写设备寄存器:KIoRange类收藏 KIoRange类: 一、Overview KIoRange类将一系列特殊的外围总线的地址映射到CPU总线的地址空间。CPU总线上的地址即可能在CPU的I/O空间,也可能在CPU的内存空间,这取决于平台和外围总线的控制方式。考虑到可移植性,所有对I/O周期(I/O cycle)进行译码的设备驱动程序必须用这个类对I/O的位置(location)进行正确的访问(access)。KIoRange是KPeripheralAddress类的派生类。 一旦映射关系建立起来,驱动程序就用KIoRange类的成员函数去控制设备的I/O寄存器。这个类提供了8位、16位和32位I/O访问控制的函数。这些函数是以内联(in-line)函数方式来使用的,它们调用系统内相应的宏来产生依赖于平台的代码。 对I/O位置(location)进行访问的另一种备选方案是创建一个KIoRegister 的实例。这要通过取得一个KIoRange对象的数组元素来实现。 为了访问一系列外围总线内存空间的地址,需要用KMemoryRange类。 二、Member Functions 1、KIoRange - Constructor (4 forms) 构造函数 【函数原型】 FORM 1: KIoRange( void ); FORM 2: (NTDDK Only) KIoRange( INTERFACE_TYPE IntfType, ULONG BusNumber , ULONGLONG BaseBusAddress, ULONG Count, BOOLEAN MapToSystemVirtual =TRUE ); FORM 3 (WDM): KIoRange( ULONGLONG CpuPhysicalAddress, BOOLEAN InCpuIoSpace, ULONG Count, BOOLEAN MapToSystemVirtual =TRUE

Windows 内核技术与驱动开发笔记(完整版)

Windows 内核技术与驱动开发笔记 1.简述Driver Entry例程 动程序的某些全局初始化操作只能在第一次被装入时执行一次,而Driver Entry例程就是这个目的。 * Driver Entry是内核模式驱动程序主入口点常用的名字。 * Driver Entry的第一个参数是一个指针,指向一个刚被初始化的驱动程序对象,该对象就代表你的驱动程序。WDM驱动程序的Driver Entry例程应完成对这个对象的初始化并返回。非WDM驱动程序需要做大量额外的工作,它们必须探测自己的硬件,为硬件创建设备对象(用于代表硬件),配置并初始化硬件使其正常工作。 * Driver Entry的第二个参数是设备服务键的键名。这个串不是长期存在的(函数返回后可能消失)。如果以后想使用该串就必须先把它复制到安全的地方。 * 对于WDM驱动程序的Driver Entry例程,其主要工作是把各种函数指针填入驱动程序对象,这些指针为操作系统指明了驱动程序容器中各种例程的位置。 2.简述使用VC进行内核程序编译的步骤 编译方式是使用VC++进行编译 1.用VC新建工程。 2.将两个源文件Driver.h和Driver.cpp拷贝到工程目录中,并添加到工程中。 3.增加新的编译版本。 4.修改工程属性,选择“project | setting”将IterMediate file和Output file 都改为MyDriver_Check。 5.选择C/C++选项卡,将原有的Project Options内容全部删除替换成相关参数。 6.选择Link选项卡,将原有的Project Options内容删除替换成相关Link。 7.修改VC的lib目录和include的目录。 8.在VC中选择tools | options,在弹出的对话框中选择“Directories”选项卡,在“Show directories for”下拉菜单中选择“Include file”菜单。添加DDK的相关路径。 3.简述单机内核调试技术 答:1.下载和安装WinDbg能够调试windows内核模块的调试工具不多,其中一个选择是微软提供的WinDbg 下载WinDbg后直接双击安装包执行安装。 2.安装好虚拟机以后必须把这个虚拟机上的windows设置为调试执行。在被调试系统2000、2003或是xp的情况下打开虚拟机中的windows系统盘。 3.将boot.ini文件最后一行复制一下,并加上新的参数使之以调试的方法启动。重启系统,在启动时就可以看到菜单,可以进入正常windows xp,也可以进入Debug模式的windows xp。 4.设置VMware管道虚拟串口。调试机与被调试机用串口相连,但是有被调试机是虚拟机的情况下,就不可能用真正的串口连接了,但是可以在虚拟机上生成一个用管道虚拟机的串口,从而可以继续内核调试。 4.请画出Windows架构简图

初探文件系统过滤驱动

初探文件系统微过滤驱动 文/图 李旭昇 文件系统微过滤驱动(File System Mini-Filter ,简称MiniFilter )是微软为了简化文件过滤驱动开发过程而设计的新一代文件过滤框架。MiniFilter 通过向过滤管理器(Filter Manager ,简称FltMgr )注册想要过滤的I/O 操作来间接地附加到文件系统设备栈上。FltMgr 是一个传统的文件过滤驱动,运行在内核模式,向第三方MiniFilter 提供文件过滤驱动的常用功能。如图1所示是一个简化的I/O 设备栈,其中有一个FltMgr 和三个MiniFilter 。 图1 简化的I/O 设备栈 针对每一种I/O 操作,MiniFilter 只需注册预处理回调(pre-operation callback )和后处理回调(post-operation callback )即可。FltMgr 会恰当的处理IRP 并在I/O 操作的前、后调用上述两个回调。 与传统过滤驱动相比,MiniFilter 优势明显。首先,MiniFilter 代码十分简洁,开发迅速。除去一些必要的注册工作,我们只需提供两个回调就可以完成对一种I/O 操作的过滤(甚至可以只提供一个,将另一个设为NULL )。对于我们不感兴趣的I/O 操作,FltMgr 将完成基本的处理并继续传递。其次,MiniFilter 是微软文档化的方法,具有良好的稳定性与跨平台性,一份代码不需修改便可以在不同系统上工作。另外,FltMgr 还提供了许多通用的函数,帮助我们获得文件名等有用的信息。 下面我们动手编写一个MiniFilter 。DriverEntry 中通过FltRegisterFilter 注册MiniFilter ,再通过FltStartFiltering 开始过滤。 extern "C" NTSTATUS DriverEntry( _In_ PDRIVER_OBJECT DriverObject , _In_ PUNICODE_STRING RegistryPath ) { DriverObject ->DriverUnload=Unload; 黑 客防线 w w w .h a c k e r .c o m .c n 转载请注明出处

02.Windows文件系统过滤驱动开发教程(2)

Windows文件系统过滤驱动开发教程 2.hello world,驱动对象与设备对象 这里所说的驱动对象是一种数据结构,在DDK中名为DRIVER_OBJECT。任何驱动程序都对应一个DRIVER_OBJECT.如何获得本人所写的驱动对应的 DRIVER_OBJECT呢?驱动程序的入口函数为DriverEntry,因此,当你写一个驱动的开始,你会写下如下的代码: NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath ) { } 这个函数就相当与喜欢c语言的你所常用的main().IN是无意义的宏,仅仅表明后边的参数是一种输入,而对应的OUT则代表这个参数是一种返回。这里没有使用引用,因此如果想在参数中返回结果,一律传入指针。 DriverObject就是你所写的驱动对应的DRIVER_OBJECT,是系统在加载你的驱动时候所分配的。RegisteryPath是专用于你记录你的驱动相关参数的注册表路径。 DriverObject重要之处,在于它拥有一组函数指针,称为dispatch functions. 开发驱动的主要任务就是亲手撰写这些dispatch functions.当系统用到你的驱动,会向你的DO发送IRP(这是windows所有驱动的共同工作方式)。你的任务是在dispatch function中处理这些请求。你可以让irp失败,也可以成功返回,也可以修改这些irp,甚至可以自己发出irp。 设备对象则是指DEVICE_OBJECT.下边简称DO. 但是实际上每个irp都是针对DO发出的。只有针对由该驱动所生成的DO的IRP, 才会发给该驱动来处理。 当一个应用程序打开文件并读写文件的时候,windows系统将这些请求变成irp发送给文件系统驱动。 文件系统过滤驱动将可以过滤这些irp.这样,你就拥有了捕获和改变文件系统操作的能力。 象Fat32,NTFS这样的文件系统(File System,简称FS),可能生成好几种设备。首先文件系统驱动本身往往生成一个控制设备(CDO).这个设备的主要任务是修改整个驱动的内部配置。因此一个Driver只对应一个CDO. 另一种设备是被这个文件系统Mount的Volume。一个FS可能有多个Volume,也可

windows驱动开发 driverstudio 教程

前言 鉴于国内开发人员迫切需要学习驱动开发技术,而国内有关驱动开发工具DriverStudio的资料很少,大家在开发过程中遇到很多问题却没处问,没法问.而这些问题却是常见的,甚至是很基础的问题。 有感于此,本站联合北京朗维计算机应用公司编写了本教程。本教程的目的是让一个有一些核心态程序编写经验或对系统有所了解的人学习编写驱动程序。当然,本教程不是DDK中有关驱动方面内容的替换,而只是一个开发环境的介绍和指导。 学习本教程,你应该能熟练地使用本套工具编写基本的驱动程序。当然如果你想能顺利地编写各种各样的驱动的话,你应该有相关的硬件知道和系统核心知识并且要经过必要的训练才能胜任。 如果真心说一句话,DriverStudio并没有对驱动程序开发有什么实质的改变,它和DDk的关系不过是sdk和mfc的关系,但很多人选择了MFC,原因不言自明,方便二字何以说得完呀?你再也不用去关注繁琐的框架实现代码,也不用去考虑让人可怕的实现细节。封装完整的C++函数库让你专注于你要实现的程序逻辑。它包含一套完整调试和性能测试、增强工具,使你的代码更稳定。 说些题外话,作驱动开发很苦,不是一般的人能忍受的,那怕开发一个小小的驱动也要忍受无数次的宕机,有时甚至有些灾难性的事故等着你,所以要有充分的思想准备。当然,在开发的过程中你会有一种彻底控制计算机的满足感,调试开发完毕后的成就感是其它开发工作所不能体会到的。当然,就个人前途来说,作驱动开发能拿到别的开发所不能得到的薪水。而且开发的生命期也会长一些,你不用不断的学习新的开发工具,只需要不断的加深对系统的理解就行了。当然,还有一点是必需的,那就是英文要好,否则永远比国外同行慢半拍。 本人水平不高,所做的工作只要能提起大家学习驱动开发的兴趣,能带领大家入门便心满意足了。在此感谢北京朗维公司(DriverStduio 国内总代理)的大力赞助,特别是感谢技术部的王江涛,市场部的李强两位先生的大力支持。同时要感谢我的女友,可爱的小猫(我对她的呢称)的贴心照顾和支持(一些很好看的图片就出自她手:))。在此我也要感谢论坛各大版主的鼎力支持和广大网友的关怀。 DriverStudio工具包介绍: DriverStudio 是一套用来简化微软Windows 平台下设备驱动程序的开发,调试和测试的工具包。DriverStudio 当前的版本包括下列工具模块: DriverAgent DriverAgent 为Win32 应用程序提供直接访问硬件的功能。即使你没有任何设备驱动程序开发的经验或经历,你也能编写出DriverAgent应用程序来直接访问硬件设备。DriverAgent 应用程序可以运行在 Windows 98, Windows 95, Windows NT 和 Windows 2000平台上。(当前版本不支持Windows XP平台。) VToolsD VToolsD 是一个用来开发针对Win9X (Windows 95 和 Windows 98)操作系统下设备驱动程序(VxD)

透明底层文件过滤驱动加密技术

明加密技术是近年来针对企业文件保密需求应运而生的一种文件加密技术。应用透明加密技术,用户打开或编辑未加密的指定后缀文件时会自动加密;打开加密了的指定后缀文件时不需要输入密码会自动解密。因此,用户在环境内使用密文不影响原有的习惯,但文件已经始终处于加密状况。一旦离开环境,文件将得不到解密服务,将无法打开,从而起到保护电子文件知识产权的效果。本文将简要介绍目前市场上透明加密软件产品采用的透明加密技术。 透明加密技术 透明加密技术是近年来针对企业文件保密需求应运而生的一种文件加密技术。所谓透明,是指对使用者来说是未知的。当使用者在打开或编辑指定文件时,系统将自动对未加密的文件进行加密,对已加密的文件自动解密。文件在硬盘上是密文,在内存中是明文。一旦离开使用环境,由于应用程序无法得到自动解密的服务而无法打开,从而起来保护文件内容的效果。 透明加密有以下特点: 强制加密:安装系统后,所有指定类型文件都是强制加密的; 使用方便:不影响原有操作习惯,不需要限止端口; 于内无碍:内部交流时不需要作任何处理便能交流; 对外受阻:一旦文件离开使用环境,文件将自动失效,从而保护知识产权。 透明加密技术原理 透明加密技术是与windows紧密结合的一种技术,它工作于windows的底层。通过监控应用程序对文件的操作,在打开文件时自动对密文进行解密,在写文件时自动将内存中的明文加密写入存储介质。从而保证存储介质上的文件始终处于加密状态。 监控windows打开(读)、保存(写)可以在windows操作文件的几个层面上进行。现有的32位CPU定义了4种(0~3)特权级别,或称环(ring),如图1所示。其中0级为特权级,3级是最低级(用户级)。运行在0级的代码又称内核模式,3级的为用户模式。常用的应用程序都是运行在用户模式下,用户级程序无权直接访问内核级的对象,需要通过API 函数来访问内核级的代码,从而达到最终操作存储在各种介质上文件的目的。

Windows驱动程序框架理解_经典入门

标题: 【原创】Windows驱动程序框架 windows驱动程序入门比较坑爹一点,本文旨在降低入门的门槛。注:下面的主要以NT式驱动为例,部分涉及到WDM驱动的差别会有特别说明。 首先,肯定是配置好对应的开发环境啦,不懂的就百度下吧,这里不再次描述了。 在Console控制台下,我们的有一个入口函数main;在Windows图形界面平台下,有另外一个入口函数Winmain。我们只要在这入口函数里面调用其他相关的函数,程序就会按照我们的意愿跑起来了。在我们用IDE开发的时候,也许你不会发现这些细微之处是如何配置出来的,一般来说我们也不用理会,因为在新建工程的时候,IDE已经帮我们把编译器(Compiler)以及连接器(Linker)的相关参数设置好,在正式编程的时候,我们只要按照规定的框架编程就行了。 同样,在驱动程序也有一个入口函数DriverEntry,这并不是一定的,但这是微软默认的、推荐使用的。在我们配置开发环境的时候我们有机会指定入口函数,这是链接器的参数/entry:"DriverEntry"。 入口函数的声明 代码: DriverEntry主要是对驱动程序进行初始化工作,它由系统进程(System)创建,系统启动的时候System系统进程就被创建了。 驱动加载的时候,系统进程将会创建新的线程,然后调用执行体组件中的对象管理器,创建一个驱动对象(DRIVER_OBJECT)。另外,系统进程还得调用执行体组件中的配置管理程序,查询此驱动程序在注册表中对应项。系统进程在调用驱动程序的Driv erEntry的时候就会将这两个值传到pDriverObject和pRegistryPath。 接下来,我们介绍下上面出现的几个数据结构: typedef LONG NTSTATUS 在驱动开发中,我们应习惯于用NTSTATUS返回信息,NTSTATUS各个位有不同的含义,我们可以也应该用宏NT_SUCCESS来判断是否返回成功。 代码: NTSTAUS的编码意义: 其中 Ser是Serviity的缩写,代表严重程度。 00:成功01:信息10:警告11:错误 C是Customer的缩写,代表自定义的位。

基于文件系统过滤驱动的内核Rootkit隐藏技术

第31卷第3期吉首大学学报(自然科学版) Vol.31No .32010年5月Journ al of Ji shou Universit y (Nat ural Science Edit ion)May 2010 文章编号:10072985(2010)03004304 基于文件系统过滤驱动的内核 Rootkit 隐藏技术 *侯春明,刘林(吉首大学物理科学与信息工程学院,湖南吉首416000) 摘要:Rootkit 是能够持久或可靠地、无法检测的存在于计算机上的一组程序和代码.研究了基于文件系统过滤驱动技术的内核Rootkit,阐述了文件系统过滤驱动的工作原理、过滤驱动的实现、基于文件系统过滤驱动的内核Rootkit 对文件隐藏的实现,并讨论了针对Root kit 隐藏的检测技术. 关键词:文件系统;Rootkit;过滤驱动;隐藏 中图分类号:T P316文献标志码:A 随着信息技术的飞速发展,以窃取计算机控制权和敏感信息为目标的程序迅速增加.Rootkit 是能够持久或可靠地、无法检测的存在于计算机上的一组程序和代码[1].Rootkit 能在目标计算机中长期潜伏,窃取信息而不被察觉,因此在计算机战争、间谍、反计算机犯罪、证据收集等领域得到广泛应用,同时也被计算机病毒、木马、恶意软件等恶意代码使用者用来实现计算机的恶意控制.控制者一旦获得操作系统的控制权限,种植了Rootkit,它就能维护一个后门,允许控制者一直以管理员权限控制系统,并且通过隐藏文件、进程、注册表项、端口等来隐藏攻击行为,从而逃避用户和安全软件的检测[2]. 隐蔽性是Rootkit 的最大特性,而文件系统是Rootkit 应用的重要领域.许多Rootkit 需要在文件系统中存储文件,并且要求这些文件实现隐藏.Rootkit 的文件隐藏技术有2种:利用钩子技术实现文件隐藏,这种方法效率低;利用文件系统过滤驱动技术,效率高,可靠性强.利用文件系统过滤驱动技术来实现Ro otkit 的文件隐藏,成为当前Windows 操作系统内核信息安全领域的热点. 1文件系统过滤驱动工作原理 1.1Windo ws 文件系统驱动文件系统驱动程序是存储管理子系统的一个组件,为用户提供在持久性介质上存储和读取信息的功能,可以创建、修改和删除文件,同时可以安全可控地在用户之间共享和传输信息,并以适当的方式向应用程序提供结构化的文件内容[3].用户应用程序对磁盘上的文件进行的各种操作,如创建、打开、关闭、读数据、写操作等,最终都要借助文件系统驱动才能完成.各种操作调用Kernel3 2.dll,通过Win32子系统调用Native A PI 向内核层传送请求,然后通过系统服务函数将上层的请求传递给I/O 管理器,在I/O 管理器中,将对磁盘文件的各种操作请求都统一为输入输出请求包IRP,然后向下层传送IRP 给文件系统驱动,最终由文件系统驱动调用磁盘及其他存储设备驱动,进而完成对物理存储设备的各种操作.操作完成后,再将处理结果沿着相反路径返回,整体执行过程如图1所示. *收稿日期:20100425 基金项目吉首大学校级科研课题(D 5) 作者简介侯春明(),男,湖南桑植人,吉首大学物理科学与信息工程学院讲师,硕士,主要从事计算机应用与信息安全研究:09J 01:1979.

相关文档