




已阅读5页,还剩37页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
毕 业 设 计(论文)中文题目Windows文件保险柜的设计与实现英文题目The Design & Implementation of Windows File Safe System 系 别:计算机科学与技术系专业年级:计算机科学与技术08级姓 名:学 号:指导教师:职 称:讲师2012 年 5 月 20 日诚信说明书毕业设计(论文)诚信声明书本人郑重声明:在毕业设计(论文)工作中严格遵守学校有关规定,恪守学术规范;我所提交的毕业设计(论文)是本人在 许高攀 指导教师的指导下独立研究、撰写的成果,设计(论文)中所引用他人的文字、研究成果,均已在设计(论文)中加以说明;在本人的毕业设计(论文)中未剽窃、抄袭他人的学术观点、思想和成果,未篡改实验数据。本设计(论文)和资料若有不实之处,本人愿承担一切相关责任。学生签名: 年 月 日摘 要摘 要随着计算机的普及,个人电脑上存放着越来越多的重要数据,由于安全的意识不够,没有采取适当的防范和备份的措施,导致数据的丢失将严重影响文件的正常使用。本系统就是针对个人计算机上的私密文件的安全隐患问题而开发的。本系统就是根据上面的这些问题而研发的,系统的结构主要可分为两部分:驱动层和应用层。驱动层我在VC6平台下编写的再结合DDK对驱动层序进行编译。系统的主要核心技术就是基于文件过滤驱动的虚拟磁盘技术。我主要采用微软的Filedisk驱动框架,加入了基于驱动层的透明加解密技术。本系统主要的难点在于驱动层序的开发,还有驱动层跟应用层之间的通讯。应用层是在Delphi7的平台下进行开发的。本系统所实现的功能:1 新建保险柜,同时生成一个虚拟磁盘。2 关闭保险柜,同时移除相应的虚拟磁盘。3 根据保险柜镜像文件,可以导入保险柜。4 可以删除保险柜,并删除保险柜镜像文件。5 可对保险柜进行密码保护。6 可自行创建指定大小的保险柜。7 存入保险柜的文件都会进行加密。关键词:进程保护;虚拟磁盘技术;透明加解密36AbstractABSTRACT重试抱歉,系统响应超时,请稍后再试支持中英、中日在线互译支持网页翻译,在输入框输入网页地址即可With the popularity of computers, A large number of important data have been stored on the PC. Because of the safety awareness, there are no measures to prevent or backup this data which result in data loss. All of these affect the normal use of the file seriously.The system was developed based on the above excuses. The structure of the system can be divided into two parts: the driver layer and application layer. The driver layer written in VC6 platform is combined with the DDK to compile the driver sequence. The system core technology is based on the virtual disk file system filter driver. The Microsoft Filedisk driven framework was applied, which adds the driver layer of transparent encryption and decryption technology. The main difficulty lies in the driver sequence of development, as well as communication between the driver layer and the application layer. The application layer in Delphi7 platform was developed.The system has the following functions:1. A virtual disk can be created.2. A corresponding virtual disk can be removed3. A safe image file can be imported.4. You can delete the safe and remove the safe image file.5. the safe can be protected by password.6. A specified size safes can be created.7. The file in the safe can be encrypted automatically.Keywords: process protection; virtual disk technology; transparent encryption and decryption目录目 录第1章 绪论11.1 研究的背景11.2 国内外的研究现状11.3 研究的目标和意义11.4 开发环境11.4.1 设备驱动程序编译工具DDK11.4.2 驱动程序加载工具和调试工具的介绍11.5 本文的章节介绍1第2章 进程保护采用的技术方案12.1 Win API简介12.2 SSDT(System Service Dispath Table)概述12.3 SSDT Hook 技术12.4 本章小结1第3章 加解密技术方法概述13.1 RC4介绍13.2 MD5介绍13.3 本章小结1第4章 系统结构及模块划分14.1 本软件的体系结构14.2 虚拟磁盘驱动Filedisk分析14.2.1 驱动层分发例程和应用层的联系14.2.2 Windows 2000/XP系统中驱动程序的一般结构14.2.3 过滤驱动工作机理14.2.4 注册表14.2.5 核心层FileDisk驱动的流程图14.2.6 驱动层各例程的定义14.2.7 核心层源码分析14.2.8 应用层源码分析14.3 进程保护之SSDT Hook技术的分析14.4 最小化到系统托盘14.4 本章小结1第5章 系统使用与测试15.1 系统的使用15.1.1 新建文件保险柜15.1.2 关闭保险柜15.1.3 打开保险柜15.1.4 修改保险柜密码15.1.5 删除保险柜15.1.6 导入保险柜15.1.7 进程保护15.2 系统的测试15.3 设计中遇到的问题15.4 可改进之处15.5 本章小结1第6章 总结1致 谢1参考文献1第1章 绪论第1章 绪论1.1 研究的背景最近几年,信息存储技术在不断地发展着,计算机上的存储设备的性能在不断地提高,这促使我们的生活在不断地向数字化以及信息化的进程发展1。现在,计算机上的数据和对数据的存储开始慢慢成为重要的资源,甚至是计算机赖以生存的基础。在我们的实际应用中,因为管理上的漏洞或者人们对系统的使用上的不当导致存储在个人计算机上的机密文件信息的泄漏和遭受破坏,这将会给人在经济上以及精神上造成一定的损失,更严重的甚至会给社会和国家带来危害2。鉴于上面的考虑,需要通过一些安全可靠的措施来保护我们个人计算机上的私密的数据文件不会被窃取或者修改。其中,最有效的措施就是对比较私密的数据文件通过加密之后再进行存储。目前人们普遍采用的文件加密方式都是基于应用层的软件加密3。我们在使用的时候可以通过这些加密软件对我们觉得比较私密不想轻易让别人查阅的文件进行加密之后再存放到磁盘上面;然后在我们需要阅读这些加密文件或需要对这些加密文件进行修改时要先对这些文件进行解密,处理好这些私密文件之后再对这些文件进行加密并存储4。像这种软件实现加解密的方式相对比较简单、开发时所需要的成本较低,但是这种软件也存在着一些很严重的缺陷,例如:安全性差、对系统的性能影响大、操作起来繁琐、对上层应用程序不透明等等。通过上面的这些分析,本论文提出了一种基于虚拟磁盘,软、硬件相结合的文件透明加解密的存储方法,这种方法是采用驱动程序技术在操作系统的内核模式下建立虚拟磁盘。虚拟磁盘的驱动程序在处理请求的同时对虚拟磁盘的数据流实时进行自动的加解密,加解密过程对软件的使用者来说是完全透明的5。我们可以像使用普通的磁盘分区一样来使用该虚拟磁盘。比如:我们可以在虚拟磁盘上创建、修改、删除目录和文件而不必关心文件的解密过程。1.2 国内外的研究现状目前针对文件过滤驱动的文件安全的技术可分为下面这几点:1防病毒引擎。到目前为止,检测病毒通常有一下几种方法:行为监测法、特征代码法、校检和法、软件模拟法,不同的软件开发厂商会根据不同方法之间的查杀效果和运行时的系统开销等因素再结合自身的技术特点来选择相应的病毒识别方法8。2用于文件系统的透明附加功能6。比如你希望文件写过程中对数据进行加密等过程,进行特殊的处理,来增加文件系统效率等等。3部分安全软件采用文件过滤驱动进行数据的读写控制来作为防信息泄密软件的基础。在这个年代,如何控制和占有各自的产权不被人窃取已经成为大家越来越关注的问题之一了。4也有一些数据安全的厂家用来进行数据的备份与恢复。以上几点都是基于文件过滤系统的基本概念针对不同工具时提出的不同的安全策略,对文件进行保护。通过对文件过滤驱动的理解和掌握可以对安全文件未来的技术发展及其变化趋势有正确的把握,从而对安全文件的策略提供科学的依据从而减少文件过滤驱动研究过程中主观性和盲目性。1.3 研究的目标和意义随着计算机技术的快速发展,人们的生活面貌也在不断地改善着7。Internet是一个面向大众的开放式系统,对信息的保密和系统的安全性考虑得并不是很完善,导致安全性问题变得日益严重8。这样如何去保护个人计算机上的信息安全变得越来越重要,即信息的保密问题显得越来越为重要。Windows文件保险柜这个软件就是针对个人计算机上的一些私人隐秘的文件进行保护,起到防止泄密的作用。本文的目标就是通过对自定义格式(lds)的文件虚拟成一个磁盘,然后把存储在计算机硬盘上的数据文件存放在这个虚拟磁盘中,同时进行自动加密,保证私人的数据文件都是以密文的形式存放在计算机硬盘上。即使文件被窃取,对加密文件的破解也能成为文件泄密的主要屏障。1.4 开发环境对于驱动程序代码采用的纯C代码加部分的汇编语言,所以我选择VC6.0的开发平台。VC6只是一个IDE,可以方便调用编译器、链接器、头文件和库文件,编辑和编译驱动功能集成在一起,这样可以提高开发效率,缩短发开周期。对于应用层的程序部分,我是在Delphi 7的平台下实现的。Delphi 7采用的是Pascal语言,也许Pascal编译器最著名的特点就是速度快,而Delphi 7正是建立在这种编译器的基础之上的。实际上,Delphi 7可能是针对Windows的最快的高级语言本地代码的编译器。Delphi的编译器比C的快了几倍。Delphi7在界面编程方面也很方便,无需写一些复杂繁琐的后台代码。1.4.1 设备驱动程序编译工具DDK对于开发WDM驱动程序来说,通常有以下三个常用组合:1直接使用WindowsDDK2使用DriverStudio3使用Windriver三种方式的优缺点:第一种:开发难度相对比较大些,而且要做很多通用的基础性的烦琐工作。但如果选用这种方法的话,我们可以对驱动开发的整个体系结构有很好的把握和理解。 第二种:难度比第一种方法低一点,其中工具软件已经帮我们做了很多基础性的工作,也封装了一些细节。所以我们只要专心去作我们需要的操作,但由于封装的问题,可能会带来一些bug,有可能导致项目的失败。 第三种:从开发驱动的角度来讲几乎是没有什么难度。这种方法很容易,但是利用这种方法只能开发与硬件相关的驱动。利用这种方法在效率上也会有问题,工作频率不是很高。但利用这种方法的话开发上花费的时间要少很多,只有上面两种方法的几分之一到几十分之一。1.4.2 驱动程序加载工具和调试工具的介绍大家都知道驱动开发涉及到得是比较底层的编程,而底层编写的程序也不好调试。所以我借助InstDrv.exe驱动加载工具和Dbgview.exe驱动测试工具。1InstDrv.exeInstDrv.exe是驱动安装和启动的一个辅助工具,无需重启电脑便可让驱动生效,且在电脑重启后用InstDrv.exe安装的驱动也随之消失,界面如下图:(图1.1)图1.1 InstDrv.exe的运行界面Dbgview.exe在驱动程序中的fprint可以通过Dbgview.exe来捕获,这样就可以利用Dbgview.exe来查看一些变量的值,便于对驱动程序进行调试。Dbgview.exe的界面如下图:(图1.2)图1.2 Dbgview.exe的运行界面图1.2中画红线的就是Dbgview.exe捕获到的一些信息,我们可以从捕获到的信息找出所需要的信息。可以通过Capture中的选择来设置所要捕获的信息,便于对没用信息的过滤。如图:(图1.3)图1.3 Dbgview.exe过滤设置1.5 本文的章节介绍第一章:主要介绍本论文的研究背景及目标意义,以及目前国内外的一些研究成果。第二章:是针对Windows文件保险柜进程保护这个模块的相关技术介绍,主要是SSDT和SSDT Hook钩子技术的介绍 。第三章:本软件涉及到一些基于驱动层(RC4)和应用层(MD5)的加解密技术,针对这两种技术进行解释说明。第四章:本系统的结构的描述,以及相关技术在本系统中运用的解释和说明。第五章:对系统的使用介绍,测试说明。第六章:总结第2章 进程保护采用的技术方案第2章 进程保护采用的技术方案2.1 Win API简介API的英文全称为Application Programming Interface(应用程序编程接口)。对这个定义的解释,需要追溯到操作系统的发展历史。当Windows操作系统开始占据主导地位的时候,开发Windows平台下得应用程序成为人们的需要。而在Windows程序设计领域处于发展的初期,Windows程序员所能使用的编程工具唯有API函数9。这些函数提供应用程序运行所需要的窗口管理、图形设备接口、内存管理等各项服务功能。这些功能以函数库的形式组织在一起,形成了Windows应用程序编程接口(API),简称Win API10。Win API子系统负责将API调用转换成Windows操作系统的系统服务调用,所以,可以认为API函数是构筑整个Windows框架的基石,在它的下面是Windows的操作系统核心,而它的上面则是Windows应用程序,如图(图2.1)所示。对于应用程序开发人员而言,所看到的Windows操作系统实际上就是Win API,操作系统的其他部分对开发人员来说是完全透明的。Windows应用程序Windows应用程序Win API子系统用户层 -Win API子系统核心层系统服务硬件层图2.1 Windows应用层序与操作系统的关系所有32为版本的Windows都支持Win16 API(以确保和旧应用程序兼容)和Win32 API(以运行新应用程序)。Windows运转的核心是一个称作“动态链接”的概念。Windows提供了应用程序可以一用的丰富的函数调用,这些函数采用动态链接库即DLL实现。在早期,Windows的主要部分只需要在三个动态链接库中实现11。这代表了Windows的三个主要子系统,它们分别叫做Kernel、User和GDI12。1Kernel(由16位的KRNL386.EXE和32位的KERNEL32.DKK实现):操作系统核心功能服务,包括进程与线程控制、内存管理、文件访问等;User(由16位的USER.EXE和32位的USER32.DLL实现):负责处理用户接口,包括键盘和鼠标输入、窗口和菜单管理等;GDI(由16位的GDI.EXE和32位的GDI32.DLL实现):图形设备接口,允许程序在屏幕和打印机上显示文本和图形。除了上述模块以外,Windows还提供了其他一些DLL以支持另外一些功能,包括对象安全性、注册表操作(ADVAPI32.DLL)、图形引擎(DIBENG.DLL)、以及网络(NETAPI32.DLL)14。Win32 API是一个基于C语言的接口,但是Win32 API中的函数可以由不同语言编写的程序调用,只要在调用的时候遵循调用的规范即可。2.2 SSDT(System Service Dispath Table)概述Windows系统服务调用Windows系统中一个关键的接口,常常称为System Call,System Service Dispatching 等等14。Windows可执行程序在内核模式中运行,并且对操作系统的所有子系统,如Win32、POSIX和OS/2都提供本地支持15。在这称之为Windows系统服务调用,它提供了在操作系统环境下由用户态到内核态的功能切换,并且完成了应用程序功能的请求,这样做的好处:达到保护系统资源的目的。Windows 2000的本机系统服务又可以称为Windows的本机应用程序编程接口。它是由执行的程序为操作系统的用户模式跟内核模式的程序提供的系统服务集。它包含了两种类型的函数:1Windows系统服务的调度占位程序;2子系统,子系统的DLL以及其他的本机映像使用的内部支持函数16。从表面上来看,Win32的函数为程序员提供了很多的接口来达到编程人员想要的功能,但是这些函数只不过是将本机应用程序的API包装起来而已,再通过调用本机系统服务来实现用户期望的功能。也就是说NTDLL.dll只是系统服务调用接口在用户模式下的一个外壳。Windows 2000 陷阱调度(Trap Dispatching)机制有一下几种:1中断(Interrupt);2延迟过程调用(Deferred Procedure Call);3异步的过程调用(Asynchronous Procedure Call);4异常调度(Exception Dispatching);5系统的服务调用。在Intel x86 的Windows 2000 系统中,处理器通过执行int 0x2e指令来激活Windows系统的服务调用;在Intel x86 的windows XP 系统中,处理器却是通过执行sysenter指令让系统进入系统服务调用的程序中;而在AMD 的 Windows XP 中使用了指令syscall来实现同样的功能17。在Windows 2000 中默认存在两个系统服务调度表,表分别是:KeServiceDescriptorTable 和 KeServiceDescriptorTableShadow。它们对应了两类不同的系统服务。Windows 2000 执行程序服务,为我们提供的系统服务调用18。而子系统则通过调用NTDLL.dll中的函数接口来实现需要的功能。在系统服务调度表KeServiceDescriptorTbale中定义了在ntoskrln.exe中实现的系统服务。同时,存在于Windows 2000 操作系统中的函数还有在Win32k.sys中实现的属于另一类系统服务调用的Win32 USER和GDI,它提供了内核模式实现的USER和GDI服务。函数KeAddSystemServiceTable允许Win32.sys和其他设备驱动程序添加系统服务表19。除了Win32.sys服务表外,使用AddSystemServiceTable函数添加的服务表会被复制到KeServiceDescriptorTable和KeServiceDescriptorTableShadow中去。可以看出这两种函数的实现在服务调度上是有所区别的:Win32内核API经过Kernel32.dll/advapi32.dll进入NTDLL.dll后使用int 0x2e中断进入内核,最后在Ntoskrnl.exe中实现了真正的函数调用;Win32 USER/GDI API直接通过User32.dll/Gdi32.dll进入内核,最后是在Win32k.sys中实现了真正的函数调用20。图2.2 KeServiceDescriptorTable的结构图图2.3 KeServiceDescriptorTableShadow的结构图2.3 SSDT Hook 技术在这我们讨论Hook的对象仅限于由Windows 2000 的ntoskrnl.exe提供的系统服务调用。Windows 2000 系统服务调用为内核模式的代码,所以我们必须书写设备驱动程序来访问系统服务调度表21。Windows 2000 系统服务调用向用户提供了经过包装的用户模式的函数接口(由NTDLL.dll提供)15。当Kernel32.dll/Advapi32.dll中的函数执行时,先调用NTDLL.dll中对应的相关接口,经过参数检查后使用int 0x2e指令进入内核模式,传递相关的服务号在SSDT中查询相关系统服务程序指针的。每个系统服务调用都对应一个服务号,同时也对应一个服务程序的地址!我们可以通过修改SSDT中的系统服务程序的函数入口地址为我们自定义的函数地址。在执行完我们的所要执行的代码之后再去执行原来SSDT中系统服务地址的代码,这样我们就可以实现对系统服务调用的Hook16。我们可以通过_KSYSTEM_SERVICE_TABLE来实现对SSDT的修改和访问。_KSYSTEM_SERVICE_TABLE对应于一个数据结构,定义如下:typedef struct _KSYSTEM_SERVICE_TABLEPULONG ServiceTableBase; PULONG ServiceCounterTableBase;ULONG NumberOfService; ULONG ParamTableBase; KSYSTEM_SERVICE_TABLE, *PKSYSTEM_SERVICE_TABLE;其中,ServiceTableBase指向系统服务程序(System Service Dispatch Table)的地址,ServiceCounterTableBase用于 checked builds, 包含 SSDT 中每个服务被调用的次数,NumberOfService 为服务函数的个数NumberOfService * 4 就是整个地址表的大小,ParamTableBase则指向SSDT中的参数地址,它们都包含了NumberOfService这么多个单元。只要找到了我们所关注的系统服务调用程序,就可以修改它的ServiceTableBase参数来实现对相关系统服务调用的Hook了。2.4 本章小结本章主要对Windows API做了些简单的介绍,以及本系统中对进程隐藏所使用到的一些技术进行介绍,主要是SSDT和SSDT Hook。第3章 加解密技术方法概述第3章 加解密技术方法概述Windows文件保险柜采用的是虚拟磁盘技术,将自定义格式的文件虚拟成一个磁盘,然后就可以像操作盘符那样进行操作,为防止文件在内存中的泄漏我采用驱动层透明加解密技术,用到的加解密算法为RC4。对于自定义格式的文件在文件头部留有4KB的空间用来存储密钥,这主要的防止自定义格式的文件被别人窃取,利用本软件打开导致文件泄密,这部分我利用的是MD5加密技术。现有的序列号加密算法大多是软件开发者自行设计的,大部分相当简单,而且有些算法作者虽然下了很大的工夫,却往往达不到所希望的效果3。其实,有很多成熟的算法可以用,特别是密码学中的一些强度比较高的算法,比如RSA、BlowFish、MD5、RC4等等。这些算法在因特网上有大量的源码或编译好的库(当然这些库中可能会有些漏洞),可以直接加以利用,所要做的只是利用搜索引擎找到它们并将它们嵌入到自己的程序中。3.1 RC4介绍RC4加密算法是大名鼎鼎的RSA三人组中的头号人物Ron Rivest在1987年设计的密钥长度可变的流加密算法簇。之所以称其为簇,是由于其核心部分的S-box长度可为任意,但一般为256字节。该算法的速度可以达到DES加密的10倍左右5。RC4算法的基本原理:1对算法的初始化;2伪随机生成子密码的算法2。首先来看下RC4的初始化算法部分:for( i = 0; i 256; i+ ) mi = i;j = k = 0;for( i = 0; i 256; i+ ) j = ( j + mi + v_strPwdk ) % 256; a = mi; mi = mj; mj = a; k = (k + 1) % v_iPwdLen; 在算法的初始化过程中,主要是利用密钥将原始数据M-box搅乱,i确保M-box中的所有元素都能够得到处理,j保证M-box被随机的搅乱。但是不同的M-box通过伪随机子密码的生成算法的处理后却可以得到不同的子密钥序列,并且该序列是随机的:for( i = 0; i Parameters.DeviceIoControl.IoControlCode)case IOCTL_FILE_DISK_OPEN_FILE:SECURITY_QUALITY_OF_SERVICE security_quality_of_service;if (device_extension-media_in_device)status = STATUS_INVALID_DEVICE_REQUEST;Irp-IoStatus.Information = 0;break;.break;case IOCTL_FILE_DISK_CLOSE_FILE:.4.2.2 Windows 2000/XP系统中驱动程序的一般结构1内核2硬件抽象层3执行体4设备驱动程序5环境子系统和子系统动态链接库6系统支持进程4.2.3 过滤驱动工作机理过滤驱动的具体实现包括以下几个步骤:首先,构造一个附在目标设备上过滤设备对象;然后,在这个设备对应的驱动程序当中截取发送到的目标设备的操作。在过滤的操作当中可能需要构造新的IRP来驱动下层驱动程序,或许也可能需要为IRP指定与之相对应的完成例程,以便这个IRP被下层的驱动程序返回后的调用;最后在合适的时候可以断开驱动13 14。4.2.4 注册表Windows注册表是一个二进制数据库,它包含了应用程序和系统软硬件的全部配置信息、初始化信息及其他重要的数据23。计算机每次启动时,都会将注册表内容读入内存,根据注册表的相关信息进行动作,例如是否启动某个程序,提供启动某个程序用到的一些参数。注册表一旦载入内存,就一直被维护着,而且在系统运行期间,各种程序有可能修改它的内容。本系统采用注册表导入文件驱动程序的信息写入其中,从而完成驱动安装注册表相关部分。HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServiceFileDisk分支中添加了相应的信息,使得系统启动时识别并启动该驱动程序。具体是在该分支中添加了与本驱动程序同名的一个键。4.2.5 核心层FileDisk驱动的流程图图4.3 Filedisk的工作流程图4.2.6 驱动层各例程的定义DriverEntry 例程:NTSTATUS DriverEntry (IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath);FileDiskCreateDevice例程:NTSTATUS FileDiskCreateDevice (IN PDRIVER_OBJECT DriverObject,IN ULONG Number,IN DEVICE_TYPE DeviceType);FileDiskUnload例程:VOID FileDiskUnload (IN PDRIVER_OBJECT DriverObject);FileDiskDeleteDevice例程:PDEVICE_OBJECT FileDiskDeleteDevice (IN PDEVICE_OBJECT DeviceObject);FileDiskCreateClose例程:NTSTATUS FileDiskCreateClose (IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp);FileDiskReadWrite例程:NTSTATUS FileDiskReadWrite (IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp);FileDiskDeviceControl例程:NTSTATUS FileDiskDeviceControl (IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp);FileDiskThread例程:VOID FileDiskThread (IN PVOID Context);FileDiskOpenFile例程:NTSTATUS FileDiskOpenFile (IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp);FileDiskCloseFile例程:NTSTATUS FileDiskCloseFile (IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp);FileDiskAdjustPrivilege例程:NTSTATUS FileDiskAdjustPrivilege (IN ULONG Privilege,IN BOOLEAN Enable);4.2.7 核心层源码分析1DriverEntry:驱动程序主函数的入口,主要是备份传入路径、查询注册表值,用ZwCreateDirectoryObject来创建设备目录,重复4次调用FileDiskCreateDevice创建设备,初始化操作函数指针。2FileDIskCreateDevice:调用I噢CreateDevice创建设备,KeInitializeEvent初始化事件对象,PsCreateSystemThread创建内核线程,入口函数是FileDiskThread,传入的函数参数为IoCreateDevice。3FileDIskThread:首先调用KeSetPriorityThread更改自身线程的优先级为LOW_REALTIME_PRIORITY,然后开始for(;),调用KeWaitForSingleObject函数等待事件对象信号,如果等到了信号,就判断事件类型:IRP_MJ_READ:调用ZwReadFile函数读取文件,从内核到用户缓冲区;IRP_MJ_WRITE:调用ZwWriteFile函数写文件,从用户到内核缓冲区;IRP_MJDEVICE_CONTROL:只有在FileDiskDeviceControl函数中设置的事件才会被触发,主要有两种操作码:IOCTL_FILE_DISK_OPEN_FILE:调用FileDiskOpenFile函数。IOCTL_FILE_DISK_CLOSE_FILE:调用FIleDiskCloseFile函数。FileDiskOpenFile:根据用户程序传入的映像文件全路径,调用ZwCreateFile函数在内核中打开它,如果文件不存在则再创建它,返回文件句柄。FIleDiskCloseFile:调用ZwClose函数关闭文件。4FileDiskCreateClose:仅返回成功;对应Create,Close操作。5FileDiskReadWrite:将IO包插入队列,然后调用KeSetEvent,激活事件对象,对应Read,Write操作。6FileDiskDeviceControl:用户程序调用DeviceIoControl的响应函数,主要有如下两种操作:IOCTL_FILE_DISK_OPEN_FILE:设置好参数,将IO包插入队列,设置对象为有信号。IOCTL_FILE_DISK_CLOSE_FILE:将IO包插入队列,设置对象为有信号。还有其它的操作类型由于输入输出都是用同一个缓冲区,因此都采用系统默认的处理,设置好需要输出的参数后,就直接从这个函数返回了。如:IOCTL_DISK_GET_DRIVE_GEOMETRY IOCTL_CDROM_GET_DRIVE_GEOMETRY等。7FileDiskUnload:在驱动程序被动态的卸载的时候,I/O管理器会调用UnLoad例程。它可能执行和DriverEntry例程相反的过程,包括移除所有它所控制的设备的设备名20。在filedisk虚拟磁盘驱动程序中,这个卸载函数为FileDiskUnload。用于卸载驱动程序。通过调用辅助函数FileDiskDeleteDevice卸载本驱动程序创建的设备对象和对应的设备工作线程。8FileDiskDeleteDevice:Unload例程中调用了FileDiskDeleteDevice,这个函数的主要用途是删除生成的磁盘对象,并终止其处理
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年建瓯市属事业单位考试试卷
- 2025辽宁沈阳水务集团有限公司“智汇水务”招聘考前自测高频考点模拟试题及答案详解(网校专用)
- 2025年河北雄安新区雄县卫健系统公开招聘专业技术人员71名模拟试卷附答案详解(黄金题型)
- 2025年灌南县公开招聘事业单位工作人员43人考前自测高频考点模拟试题及答案详解(夺冠)
- 2025内蒙古阿拉善盟首批事业单位“1+N”招聘54人模拟试卷附答案详解(考试直接用)
- 2025湖南衡阳理工职业学院人才招聘4人模拟试卷附答案详解(典型题)
- 2025广东韶关市始兴县事业单位招聘暨“青年人才”和“急需紧缺人才”招聘89人模拟试卷附答案详解
- 2025广东中山翠亨集团有限公司副总经理选聘1人模拟试卷带答案详解
- 2025年哈尔滨巴彦县公安局公开招聘警务辅助人员32人考前自测高频考点模拟试题及一套答案详解
- 2025内蒙古通辽市奈曼旗招募青年见习人员387人模拟试卷及答案详解(名师系列)
- 云南师大附中2024年数学高一下期末联考试题含解析
- 供应链管理综合实验实验报告
- (正式版)JBT 5300-2024 工业用阀门材料 选用指南
- 2024量子人工智能技术白皮书-量子信息网络产业联盟-2024.1
- 公务员考试培训-判断推理通关秘籍
- 第13课《警惕可怕的狂犬病》 课件
- 《社会工作伦理案例分析》课件 儿童和青少年社会工作伦理
- HSK标准教程5下-课件-L2
- 艺人明星形象代言肖像权使用合同模板
- 毕业设计论文-计算机类
- 工作单位接收函
评论
0/150
提交评论