




已阅读5页,还剩75页未读, 继续免费阅读
(计算机软件与理论专业论文)基于内核模式驱动的文件系统监控.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要 摘要 随着计算机网络技术的发展,企业对网络技术的应用也越来越多,局域网安全 问题就变得越发重要。由于计算机中的数据都是以文件的形式存储,文件系统安 全就成为局域网安全里的一个关键部分。本课题以w i n d o w s 环境下基于内核模式 驱动的文件系统监控为研究对象展开工作。 本文描述了文件系统监控模块的内部结构以及各部分的协作,总结了文件系统 过滤驱动的工作原理及开发文件系统过滤驱动的基本流程,详细描述了附着卷设 各,获取文件全路径名,获取进程名,使用n f a 进行当前文件名与关键文件名的 比较的实现过程。为便于读者理解课题的设计,本文还简要介绍了内核模式与驱 动程序的一些相关概念。 在本课题中,我参与了课题的理论研究与分析工作,并独立负责文件系统监控 模块的设计与实现,在课题后期,针对软件的测试作了大量工作。最终,文件系 统监控模块作为局域阿监控系统的一部分投入使用。 关键词:内核模式,文件系统过滤驱动,不确定的有限自动机 电子科技大学硕士学位论文 a b s t r a c t w i t ht h ed c v e l o p m e n to fn e t w o r kt e c h n o l o g y ,e n t e r p r i s e s 印p l i e sm o r ea n dm o r e n e t w o r k ,a n dt l l es e c l l r 时o fl a nb e c o m e sm o r ea f l dm o r ei m p o r t a n t t h ed a t ai nt 1 1 e c o m p u t e rs t o r e da s 矗l e s ,t h e r e f o r e ,6 】es y s t e ms e c u r i t yi sak e yi nt h es e c u r i t yo fl a n t h er e s e a r c ho b j e c to ft h i sp r o j e c ti s 五l es y s t e mm o n i t o r i n ga n dc o n t r 0 1 l i n gb a s e do n k e m e l m o d ed r i v e ri nw i n d o w s t h i sw o r kd e s c r i b e dt h es t r u c m r eo ff i l es y s t e mm o n i t o f i n ga j l dc o m r o l l i n gm o d u l e a n dt 1 1 ec o l l a b o r a _ t i o na m o n g 也r e es u b m o d u l e s ,s m n m a r i z e dt h ew o r k i n gp r i n c i p l eo f n l es y s t e mf i l t e rd r i v e ra n dm en o wo fd e v e l o p i n gaf i l es y s t e mn l t e rd r i v e r ,a 1 1 d d e t a i l e da t t a c m n gt 0av o l 啪ed e v i c e ,g e t t i n gaf i l e 如1 1p a t h ,g e m n gap r o c e s sn 锄e , c o m p a r i n gc 哪n tn l en 黜ew i m ak e yf i l en 锄eu s i n gn f a i no r d e rt oc o n v e n i e n c e t 1 1 er e a d e rt ou n d e r s t a i l dk e n l e lm o d ea 1 1 dd r i v e r s ,n l i st 1 1 e s i si n t r o d u c e sc o n c e p t sa b o u t t i l a tf j r s t i nt l l i sp r o j e c t ,it o o kp a ni nt h er e a s e r c ho ft h es u b j e c t ,a i l dt o o kc h a 瑶eo ft h e d e s i g na n di m p l e m e mo ft h ef i l es y s t e mm o n i t o r i n ga n dc o n t r o l l i n gm o d u l e ,a n dt e s t e d t 1 1 em o d u l ef o ra1 0 n gt i m e f i n a l l yf i l es y s t e mm o n i t o r i n ga i l dc o n t r o l l i n gm o d u l e f o u n da p p l i c a t i o na sap a r to fl a nm o 血o r i n ga 1 1 dc o n t r o l l i n gs y s t e m k e yw o r d s :k e m e lm o d e ,f i l es y s t e mf i l t e rd r i v e r ,n o n d e t e m l i n i s t i cf i n i t ea u t o m a t o n 独创性声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工 作及取得的研究成果。据我所知,除了文中特别加以标注和致谢的地 方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含 为获得电子科技大学或其它教育机构的学位或证书面使用过的材料。 与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明 确的说明并表示谢意。 签名:丝量堕日期:2 占年f 月j 日 关于论文使用授权的说明 本学位论文作者完全了解电子科技大学有关保留、使用学位论文 的规定,有权保留并向国家有关部门或机构送交论文的复印件和磁 盘,允许论文被查阅和借阅。本人授权屯子科技大学可以将学位论文 的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或 扫描等复制手段保存、汇编学位论文。 ( 保密的学位论文在解密后应遵守此规定) 签名;睥导师签名越 日期:犹年f 月;,日 第一章引言 第一章引言 1 1 课题实用价值和理论意义 随着计算机网络技术的飞速发展,企业对网络技术的应用也不断深入。企业的 大量技术和业务数据都存储在计算机和局域网当中。局域网上的大多数的应用对 企业是至关重要的,一旦出现数据泄漏、破坏的事件,将会使企业遭受巨大的损失。 然而,与i n t e m e t 相比,局域网速度更快、防范疏漏、安全措施简单。局域网的安 全隐患包括:局域网速度快,信息容易快速被窃取,监控时机转瞬即失;局域网 接入容易,通常只要选用通用的信息设备即可连入网络;一般局域网接入身份验 证措施简单;绝大多数局域网上的信息都采用明文传输;局域网的用户往往有权 直接对数据库、服务器进行操作,有对关键数据进行误操作、有意窃取或者破坏 的机会;计算机系统外部设备的使用不当会造成数据泄漏;许多局域网用户对口 令不重视,采用弱口令,使得在局域网中黑客口令破解程序更易奏效;局域网多 采用基于c s 方式,客户端直接对服务器操作,信息数据在局域网上传输非常不 安全。这些都使得局域网安全问题变得越来越重要和突出,也使得局域网监控成 为必要。 在局域网监控中的一个重要方面就是文件系统监控。局域网中的数据管理本身 通常不是很严谨。重要的数据一般只是采用了简单的授权口令保护,产品研发过 程中的各种核心技术资料和工作资料就更没有任何的保护措施,至少对整个开发 组而言,全部的开发成果和数据都是透明的和共享的,对于防误操作、防失窃和 防破坏的保护几乎没有采取任何措施。这样就使得在局域网中非法取得授权和获 得资料变得非常的容易。没有文件系统监控,使得任何人都可能有意或无意造成 安全隐患、导致灾难。 1 2 课题的创新性、主要内容和实现目标 目前国内通常采用的进行文件系统监控的技术主要是挂钩w i n d o w s a p i ,通过 在用户模式挂钩c r e a t e f i l e ( ) 、o p e n f i l e ( ) 、r e a d f i l e ( ) 、w r i t e f i l e ( ) 等a p i 函数来监 控文件系统,但这种技术本身也有一些缺点。挂钩w j n d o w s a p i 通常有两种方法: 修改i a t 。这种方法的缺点是,如果象s h e l i c o d e 中常用的那种根据d l l 输出表 来计算函数地址的方法,修改i a t 就无法挂钩到目标函数了。修改目标函数的 电子科技大学硕士学位论文 前几字节,跳转到自定义的函数,自定义的函数里面再把那几个字节还原,调用 原函数。这种方法的缺点是多线程环境下不健壮。而本文采用的技术是内核模式 的文件系统过滤驱动,它直接附在f a t 3 2 、n t f s 的文件系统驱动上对文件系统进 行监控。这种技术不仅没有挂钩w i n d o w s a p i 的缺点,还具有主动、实时、高效、 低耗的优点。 本课题的主要内容是设计并实现文件系统监控,增强系统安全性。可以将这个 大的问题细化为下面的四个具体需求:设置关键文件及其读写权限( 文件名支持 通配符t 和? ) ,控制关键文件的读写访问,记录关键文件的读写访问,记录可移 动磁盘的写访问。 本课题的实现目标为在w i n d o w s 环境下实现源代码级兼容、可运行于各版本 w i n d o w s 上的文件系统监控模块,它作为局域网监控系统的一部分,以一定的接 口方式与系统进行通信协作。 1 3 本文的内容安排 本课题的文件系统监控是基于内核模式驱动的,但仍然包括一些用户模式的接 口,用户模式的接口与内核模式的驱动还需要进行相互通信协作。现就课题研究 的重点,对本文内容做如下安排: 第二章介绍内核模式与驱动程序基本的应用及理论背景知识,包括内核模式 i 0 处理技术、内核模式驱动对象、驱动程序的基本例程;第三章具体介绍文件系 统监控模块的设计,包括结构、处理流程、数据结构、模块协作关系、接口、数 据结构等;第四章具体介绍了在w i n d o w s 环境下实现一个文件系统监控模块,包 括文件系统过滤驱动、关键文件设置接口和文件访问监视程序的实现以及各予模 块之间的相互协作。最后,对课题的研究工作进行总结,描述了本课题的目的、 工作内容和意义。 第二章内核模式与驱动程序 第二章内核模式与驱动程序 2 1 内核模式i o 处理技术 2 1 1 内核模式代码的执行 w i n d o w s 的内核代码部分( 包括驱动程序) 由大量代码构成。但是,是什么使 这些代码运行起来了呢? 所有代码都在一个硬件和软件环境中执行。这里所说的 环境是指当一个c p u 指令执行时的系统状态,它包括所有c p u 寄存器( 包括堆栈) 的状态、处理器模式( 用户模式或者内核模式) ,以及硬件页面表状态。其中,硬 件页面表状态描述了代码执行时能够看到的内存种类,以及内存在地址空间中所 处的位置。 显然,代码必须假定它的执行环境。w i n d o w s 为内核模式执行程序定义了三种 执行环境。换句话说,内核模式驱动程序代码在三种环境之一中执行。 2 1 1 1 陷阱或者异常环境 用户模式代码可以通过陷入内核模式请求一个o s 服务。当内核模式例程执行 时,可能是由于一个用户模式的应用程序或服务发生了一个硬件或者软件异常, 或者出现了陷阱。在这种情况下,内核模式代码的环境主要是导致异常的用户代 码的环境。内核模式代码看到内存与主动请求的用户模式线程看到的内存视图相 同。 当用户模式线程直接请求管理器时,i o 管理器在请求者的环境中执行。 接着,i 0 管理器可能会调用设备驱动程序中的一个分派例程,从而使驱动程序中 的分派例程在这个异常环境中执行。 2 1 1 2 中断环境 当硬件( 或者软件) 产生一个应答式中断( a c k l l o w l e d g e di n t e m l p t ) 时,在系 统中执行的任何代码都被停止,并保留在它的堆栈中。执行环境保存起来,而控 制迅速传递给负责所发生中断的服务例程。 很清楚,中断发生时执行代码的环境是不关联的并且是随机的。服务于中断的 内核模式代码不能对页面表的状态做出任何假设,用户模式代码必须被认为在这 种环境下不可用。在中断环境中运行的代码( 包括大量驱动程序例程) 不能对当 筇二章内核模式与驱动程序 第二章内核模式与驱动程序 2 1 内核模式i o 处理技术 2 1 1 内核模式代码的执行 w i n d o w s 的内核代码部分( 包括驱动程序) 由大量代码构成。但是,是什么使 这些代码运行起来了呢? 所有代码都在一个硬件和软件环境中执行。这里所说的 环境是指当一个c p u 指令执行时的系统状态,它包括所有c p u 寄存器( 包括堆栈) 的状态、处理器模式( 用户模式或者内核模式) ,以及硬件页面表状态。其中,硬 件页面表状态描述了代码执行时能够看到的内存种类,以及内存在地址空间中所 处的位置。 显然,代码必须假定它的执行环境。w i n d o w s 为内核模式执行程序定义了三种 执行环境。换句话说,内核模式驱动程序代码在三种环境之一中执行。 2 1 1 1 陷阱或者异常环境 用户模式代码可以通过陷入内核模式请求一个o s 服务。当内核模式例程执行 时,可能是由于一个用户模式的应用程序或服务发生了一个硬件或者软件异常, 或者出现了陷阱。在这种情况下,内核模式代码的环境主要是导致异常的用户代 码的环境。内核模式代码看到内存与主动请求的用户模式线程看到的内存视网相 同。 当用户模式线程直接请求i ,o 管理器时,i o 管理器在请求者的环境中执行。 接着,i o 管理器可能会调用设各驱动程序中的一个分派例程,从而使驱动程序巾 的分派例程在这个异常环境中执行。 2 1 + 1 2 中断环境 当硬件( 或者软件) 产生一个应答式中断( a c l ( 1 1 0 w l e d g e di n t e m 】p t ) 时,在系 统中执行的任何代码都被停止,并保留在它的堆栈中。执行环境保存起来,而控 制迅速传递给负责所发生中断的服务例程。 很清楚,中断发生时执行代码的环境是不关联的并且是随机的。服务于中断的 内核模式代码不能对页面表的状态做出任何假设,用户模式代码必须被认为在这 种环境下不可用。在中断环境中运行的代码( 包括大量驱动程序例程) 不能对当 种环境下不可用。在中断环境中运行的代码( 包括大量驱动程序例程) 不能对当 电子科技大学硕士学位论文 前进程或线程做出假设。 2 1 1 3 内核模式线程环境 最后一种可能性是,一段代码在一个独立的内核线程中运行。一些驱动程序产 生独立的线程以处理要求轮询的设备,或者用来处理专门的超时条件。这些内核 模式的线程基本上与w i n 3 2 编程教程中描述的用户模式线程相同。依据分配的线 程优先级,它们在被内核调度程序调度时执行。 与中断环境一样,内核模式线程环境不能做出关于当前进程或线程的假设。线 程看到的页面表的状态基本上是随机的。 2 1 2w i n d o w s 使用的中断优先级 中断优先级是在竞争c p u 服务的不同i ,o 设备问用来判断谁先得到服务的方 法。w i n d o w s 实现的中断方案不但考虑了硬件中断优先级,而且还把概念扩展到 执行环境优先级。 2 1 2 1c p u 优先级分层 因为不同的c p u 结构在处理硬件中断优先级方面会有不同的方法,因此 、矾n d o w s 提供了一种理想化的、抽象的方案来适应所有平台。抽象方案实际上是 由平台专用的h a l 例程完成的。 表2 - 1i r q l 等级用法 1 r q l 等级 产生对象 曝q l 名称 用途_ 一 h i g h e s t - l e v e l 机器校验和总线错误 p o w e r _ l e m 电源故障中断 i p il e v e l 多处理器系统的处理器间门铃 硬件c l d c k 2 _ i 正! l间隔时钟2 c l o c k l - l e v e l间隔时钟1 p r o f i l e l e v e l 配置文件计时器 d l r q l si o 设各中断的等级数( 平台相关) d i s p a t c h _ l e v 】三l线程调度和延迟过程调用的执行 软件a p cl e v e l 异步过程调用执行 e a s s i v e - l e v e l正常线程执行等级 这种抽象优先级方案的基础是中断请求等级( i r l t c r n l p tr e q u e s tl e v e l ,i r q l ) 。 i r q l 是一个定义了简单优先级的数字,在给定的i r q l 上执行的代码不能被更低 级或同级的i r q l 上的代码中断。表2 一l 列出了w i n d o w s 优先级方案中使用的 第二章内核模式与驱动程序 i r q l 等级。不管底层的c p u 或总线结构如何,这是驱动程序所看到的i r q l 等 级。我们应该知道,指令总是在一个给定的i r q l 值下执行的。m q l 等级作为给 定线程的执行环境的一部分进行维护,因此,在任何给定时间,当前的1 r q l 值对 操作系统来讲都是已知的。 真实的硬件中断等级在i r q l 抽象等级的d i s p a t c h _ l e v e l 和 p r o f i l e _ l e v e l 之间。这些硬件中断等级定义为d i r q l s ( d e v i c ei r q l s ) 2 1 2 2 中断处理顺序 中断到达c p u 时,处理器将请求中断的i r q l 值与c p u 当前i r q l 值进行 比较。如果请求中断的i r q l 值低于或等于当前的i r q l 值,则请求暂时被搁置a 在i r o l 等级降到较低值之前,请求一直处于等待状态。 另一方面,如果请求的i r q l 值高于c p u 当前i r q l 值,则处理器执行如下任 务: 1 ) 挂起指令执行。 2 ) 将足够的状态信息保存在堆栈中,以便以后恢复被中断的代码。 3 ) 升高c p u 的i r q l 值以匹配请求的i r q l ,从而防止较低级的中断发生。 4 ) 将控制交给合适的中断服务例程。 中断任务结束之后,服务例程执行一个特殊的解除中断指令。该指令从堆栈中 恢复c p u 状态信息( 包括前一个i r q l 值) ,而将控制交还给被中断的代码。 注意这种方案允许更高级的i r q l 请求中断低级r q l 中断( 一个中断的中 断) 的服务例程。因为整个机制是基于堆栈的,这就不会产生混淆。但是,这种 机制可能会引起同步问题。 2 1 2 3 软件产生的中断 表2 1 所列i r q l 中的低级中断项被标志为由软件产生的中断,一些中断处理 技术通过执行特权指令由内核模式代码激发。w i n d o w s 使用这些软件中断来扩展 中断优先级方案,使其包括线程调度。通过提升一个线程的i r q l 值以防止其他 线程的中断,这就可以用来同步竞争线程间的活动。 2 1 3 延迟过程调用( d p c ) 当一段内核模式代码运行于一个被提升的i r q l 上时,其他任何拥有相同或较 低i r q l 值的中断都不能( 在相同的c p u 上) 执行。当然,如果在很高的i r q l 上执行的代码太多,总体系统性能将下降。时间关键的事件处理会被延迟,并导 电子科技大学硕士学位论文 致更加灾难性的结果。 为了避免这些问题发生,应当对内核模式代码进行设计,使其尽可能在最低级 的i r q l 上执行尽量多的代码。延迟过程调用就是这样一种重要策略。 2 1 3 1d p c 运行 d p c 结构允许一个任务从一个高级的i i l 上被触发,但是不被执行。当服务 硬件在一个驱动程序上中断时,这种延迟执行是必要的,因为在一个给定任务能 被延迟的情况下,没有必要中断低级i r q l 代码的执行。图2 1 表示了d p c 的运 行过程。 s v b l e m c 庐c d l r o lo u e u e 图2 1 延迟过程调用流程图 1 ) 当运行在高级( 例如,硬件) i r q l 上的一些代码需要在一个较低级的i r q l 上调度它的一些工作时,它将一个d p c 对象添加到系统d p c 调度队列的末端,并 请求一个d p c 软件中断。因为当前的i r q l 等级高于d i s 弹汀c hl e v e l ,中断不 会立即得到响应,而是保持等待状态。 2 ) 最后,处理器的i r q l 降到d i s p a t c hl e v e l 之下,而先前被挂起的中 断由d p c 调度程序得到服务。 3 ) d p c 调度程序从系统队列中取出每个d p c 对象,并调用指针保存在该对 象中的函数。c p u 的i r q l 等于d i s 蹦r c hl e v e l 时,该函数被调用。 4 ) 当d p c 队列为空时,d p c 调度程序解除d i s p a t c hl e v e l 软件中断。 设备驱动程序通常用一个d p c 调度清除工作,这具有减少驱动程序花费在 6 第二章内核模式与驱动程序 d i r q l 上的时间总量的效果,并能提高总的系统吞吐量。 2 1 3 1d p c 行为 总的说来,使用d p c 是简单的,因为w i n d o w s 带有库例程,隐藏了大多数 处理细节。但是,应当对d p c 的两个容易发生误解的地方进行强调。 第一,w i n d o w s 限定在某一时刻只有d p c 对象的一个实例可以存在于系统 d p c 队列上。拒绝已有实例在队列中的d p c 对象进入队列。因此,即使驱动程序 希望两个对d p c 例程的调用,也只有一个调用发生。如果在执行初始的d p c 之前 两个连续的设备中断发生,则这种情况就有可能发生。当驱动程序服务第二个中 断时,第个d p c 仍在队列上。 必须在驱动程序中用精巧的设计处理这种情况的发生。也许可以维护d p c 请 求的一个计数,或者驱动程序可以选择实现一个不同的请求队列。在真实的d p c 执行时,它会检查计数或者专用队列,以确定究竟做什么工作。 第二,在多处理器机器上工作时,会出现一个同步问题。一个处理器能够服务 中断并调度d p c 。然而,在它解除中断之前,另一个并行的处理器能够响应队列 中的d p c 。因此,中断服务代码将与d p c 代码同步执行。为此,对于任何与驱动 程序接口服务例程共享的资源,d p c 例程必须同步对这种资源的访问。 d p c 结构不允许两个d p c 同步执行,即使在一个多处理器机器上也不允许。 因此,被不同d p c 例程共享的资源不必担心同步问题。 2 1 4 用户缓冲区访问 当用户模式线程发出一个i o 请求时,它通常传递位于用户空间中的数据缓冲 区地址。由于用户模式地址通过页面表的下半部分( i o s t a t u s s t a t u s ; 因为p i i p 指向的内存已经被释放。 2 完成请求 些i o 请求可以在不执行任何真实设备操作的情况下进行处理。打开设备句 电子科技大学硕士学位论文 柄或返回存储在设备对象中的信息就是这种请求的实例。要在分派例程中完成这 样的一个请求,完成如下工作: 1 ) 把一个成功完成的代码放在i r p 的l o s t a t u s 块的s t a t u s 字段中,并把 i n f o r n l a t i o n 字段设为合适的值。 2 ) 调用i o c o m p l e t e r e q u e s t ,释放优限权没有增加的i r p 。 3 ) 退出分派例程,返回s 1 、a t u ss u c c e s s 值。 3 调度一个设备操作 分派例程可能采取的最后一个动作是它需要与真实硬件交互以完成请求。例 如,数据传输,控制函数,或者信息查询。在这种情况下,分派例程必须使i r p 入队列,由驱动程序的s t a n 加例程进行最后处理,然后快速返回到i o 管理器, 表明请求被挂起。要调度一个设备操作,完成如下工作: 1 ) 调用i o m a r k 呻p c n d i n g ,以通知i ,o 管理器请求还在进行中。 2 ) 调用i o s t a n p a c k e t ,使s t 甜i ,o 例程的i r p 入队列。驱动程序还可以提供 自己定制的排队机制,以代替使用i 0 管理器的例程。 3 ) 退出分派例程,返回s 叫汛r sp e n d i n g 值。这就允许原始请求者在执行 设备操作的同时继续它的其他操作。 我们很少知道这样一个事实:i o 管理器在分派例程返回时,自动完成任何没 有被标志为挂起的i r p 。不幸的是,这种自动机制不能调用由上层驱动程序附加 给i r p 的i oc o m p l e t i o n 例程。因此,驱动程序调用i o c o m p i e t e r e q u e s t 或 i o m a r k i r p p e n d i n g 显式地查看l i 擅状态是重要的。 2 3 3 处理读写请求 最基本的i 0 请求是在用户缓冲区和设备之间交换数据。“o 管理器为请求数 据传输者提供了传统的读写抽象。请求以i r p 形式递交给驱动程序,该i r p 的主 要函数代码是i r pm jm d 或i r pm j _ w 砌t e 。i r p 内的另一个字段规定请求 者缓冲区的地址。缓冲区地址是一个直接虚拟地址,还是i ,o 管理器分配和维护的 中间非分页池缓冲区,这取决于设各对象的f l a g s 字段。无论如何,在缓冲区和真 实设备问传输请求的字节数是读、写分派倒程的责任。 2 3 3 1 用户缓冲区访问 驱动程序可以在每个设备的基础上指定d 0d i r e c t1 0 或 d ob u f f e r e di o ( 通过设各对象的f 1 a g s 字段) 。“o 管理器的确切行为以及分 第二章内核模式与驱动程序 派例程随后的责任将在下面进行讨论。 1 有缓冲的i o 在读或写的开始阶段,管理器验证用户缓冲区跨越的所有虚拟内存页都是 有效的。对于有缓冲的i ,o ,接着分配一个非分页的池缓冲区,其大小足以保存用 户请求。该临时缓冲区的地址放在a s s o c i a t e d i r p s y s t e m b u n e r 的i r p 字段中。该地 址在传输期间一直保持有效( 即,直到i r p 标志为完成为止) 。 对于读操作,i o 管理器记住i r p 的u s e r b u 疵r 字段中原始用户缓冲区的地址。 然后,它使用该保留的地址完成将数据从非分页地复制到用户内存的请求。 对于写操作,在激活分派例程之前,i o 管理器把用户缓冲区复制到非分页缓 冲区。然后,它将i r p 的u s e r b u 如r 字段设为空( n u l l ) ,因为不再需要保留该 状态。 2 直接加 在操作开始阶段,i 0 管理器验证用户缓冲区跨越的页面表项。然后,它建立 一个称为m d l ( m e m o r yd e s c r i n o rl i s t ) 的数据结构,并把m d l 的地址保存在i r p 的m d l a d d r e s s 字段。a s s o c i a t e d i r p s y s t e m b u 腩r 和u s e r b u 饪e r 字段都设为空 ( n u l l ) 。 对于d m a 操作,m d l 结构直接用来与个适配器对象一起执行数据传输。 对于程控l ,o 设备,m d l 可以与函数m m g e t s y s t e m a d d r e s s f o r m d l 一起用来获取 用户缓冲区的系统地址视图。使用该技术,用户缓冲区被锁定在物理内存中( 即, 强制成为不可分页) ,并使得驱动程序代码可以通过0 x 8 0 0 0 0 0 0 0 以上的地址访问 它( 用户模式代码必须仍然能够用低于0 x 7 f f f f f f f 的原始地址访问同样的物理内 存) 。当i o 请求最终完成时,用户缓冲区释放,并从系统地址空间映射回来。 3 两种方法都不用 在设备对象的f l a g s 字段中有两位,规定是d o b u f f e i 砸d j o 还是 d od i r e c ti o 。如果没有为设备设定上述的任何一位,则i o 管理器不执行上 述规定的任何一种动作。相反,它只是不把请求者缓冲区的用户空间地址放入i r p 的u s e r b u f f e r 字段。a s s o c i a t e d i r p s y s t 即1 b u f 强r 和m d l a d d r e s s 字段都设为空 ( n u l l ) 。 一个简单的用户模式地址并非很有用。驱动程序中的大多数例程在执行时不 能保证能够映射原始请求者的页面表。因此,用户缓冲区地址是没有用的。但是 有一种例外:在上层驱动程序的分派例程被激发时,在原始请求者的线程中执行。 像这样,用户缓冲区地址被映射并且是有效的。中层驱动程序、任意d p c 或者中 电子科技大学硕士学位论文 断服务例程( i s r ) 绝不能依赖于有效的用户空间缓冲区。 第三章文件系统监控模块的设计 第三章文件系统监控模块的设计 局域网监控系统是针对一些安全性要求较高的企业而开发的一个网络安全系 统,它的主要功能包括:主机信息获取、外部设备监控、拨号监控、共享监控、 文件系统监控、主机非法接入监控、管理用户分级等。 文件系统监控模块是局域网监控系统的一个模块,它专门负责对文件系统进行 监控。 3 1 需求 文件系统监控模块主要用于控制与记录用户对被监控主机上文件的访问。具体 的需求描述如下: 设置关键文件及其读写权限( 文件名支持通配符和? ) 。 控制关键文件的读写访问。 记录关键文件的读写访问。 记录可移动磁盘的写访问。 3 2 运行环境 操作系统:w l n d o w s2 0 0 0 、w i n d o w sx p 、w i n d o w s2 0 0 3 。 硬件推荐配置:奔腾i i il g 以上,2 5 6 m 以上内存。 网络环境:以太局域网i p v 4 网络,主机数目 d r i v e r o b j e c t 获取驱动对象的名字,如果名字为 “怄i l e s y s t e m f sr e c ”,说明这个驱动不是文件系统驱动,而是文件系统识别 器驱动,可以忽略,直接返回s n 玎u ss u c c e s s 并退出。 3 ) 调用系统函数i o c r e a 把d e v i c e ( ) 创建一个无名的设备对象。 4 ) 复制文件系统驱动c d o 的f l a g s 和c h a r a c t e r i s t i c s 到新创建f i d 0 的f l a g s 和 c h a r a c t e r i s t i c s ,使f i d o 与c d o 有相同的1 0 缓冲策略和特性。 5 ) 调用系统函数i o a n a c h d e v i c e t o d e v i c e s t a c k 0 ,把新创建的f i d o 附着到文件系 统驱动的c d o 上。 6 ) 保存d e v i c e n 锄e 到新创建的f i d 0 的设备扩展里。 7 ) 清除f i d o 的d o - - d e v i c e j n i t i a l i z i n g 标记位,表示设备对象己初始化完 毕。 4 1 2 ,4 函数s 拉s c o 曲o l m o u n t v 0 1 u m e 0 的流程 1 ) 保存d e v i c e o b j e c t - d e v i c e e x t e n s i o n 到局部变量d e v e x t 中。调用系统函数 i o g e t c u e i n i r p s t a c k l o c a t i o n ( ) 取得当前工0s t a c kl o c a t i o n 指针,并保存 到局部变量i l p s p 中。 2 ) 保存存储栈设备对象的指针,保存i r p s p - p a r a m e t e r s m o u m v o 】u m e v p b r e a l d e v i c e 到局部变量s t o r a g e s t a c k d e v i c e o b j e c t 中。这样做是因为v 曲可能 被下层的文件系统修改。 3 ) 调用系统函数i o c r c a t e d e v i c e ( ) 创建一个无名的设备对象。 4 ) 保存s t o r a g e s t a c k d e v i c e o b j e c t 到新创建的f i d 0 的设备扩展中。 5 ) 根据w i n d o w s 版本的不同,调用系统函数i o v o l u m e d e v i c e t o d o s n a m e ( ) 或 r n v o l u m e d e v i c e t o d o s n 唧e ( ) ,获取该卷设备的d o s 名字,即盘符。然后保 存到新创建的f i d o 的设备扩展中。 6 1 保存文件系统设备名到新创建的f i d o 的设备扩展中。 7 ) 保存卷设备的特性到新创建的f i d 0 的设备扩展中。 8 ) 调用系统函数k e i n i t i a l i z e e v e n t 0 初始化事件w a i t e v e n t 。 9 )调用系统函数i o c o p y c u r r e n t i r p s t a c k l o c a t i o n t o n e x t ( ) 把当前i r p 栈位置复制到 下一个i r p 栈位置。 1 0 ) 调用系统函数i o s e t c o m p l e t i o r 止b u t i n e 0 ,设置完成例程。 1 1 ) 调用系统函数i o c a l l d r i v e r ( ) ,把i r p 传递到下层的文件系统驱动。 电子科技大学硕士学位论文 1 2 ) 调用系统函数k e w a i t f o r s i n g l e o b j e c t ( ) ,等待完成例程返回,即文件系统驱动 创建v d o 完毕。 1 3 ) 调用函数s f f s c o n t r o l m o u n t v o l u m e c o m p l e t e 0 ,检查文件系统驱动的v d 0 是否 成功创建,如果成功则附着f i d o 到v d o 。 4 1 3 控制和记录读,写访问的实现 4 1 3 1 分派例程的执行环境 所有驱动程序分派例程都有相同的函数声明。表4 3 描述了所有分派例程的原 型。与驱动程序的入口例程一样,分派例程运行在p a s s el e v e l 的i r o l 上, 这意味着它们能够访问分页系统资源。 表4 - 3 d i s p a t c h 的函数原型 ,。栖s 住蝼嘲昂a t 池: 一 i 她l = = p a s s i l e 呻磷建瓣。t “蹬_ 鎏漩絮 ”j 。:曩说明7 鬈攀赣誊誊 i np d e v i c e o b j e c t p d e v o b j e c 该请求的目标设备的指针 i n p r j p p h p 指向描述该请求的i r p 的指针 s t a l l s - s u c c e s s :请求成功完成 返回值 s t a t u s p e n g i n g :请求挂起 s 1 、a 1 、u s x x x ;相应错误代码 i o 管理器激活分派例程以响应用户模式或内核模式请求。在调用之前,i 管 理器建立i r p ,并用有效数据填充它,包括指向用户缓冲区的指针。i o 管理器验 证用户缓冲区,保证缓冲区跨越的每页地址在请求者环境中是可读的或可写的。 如果请求针对有缓冲的i o ,i o 管理器首先分配一个非分页的池缓冲区,并且如 果请求是写请求,则将数据从用户缓冲区复制到该池中。如果请求是针对直接】o 的,i ,o 管理器释放整个用户缓冲区到物理内存,并锁定它。 分派例程通常只使用l r _ p 跟踪“o 请求的状态。如果分派例程使用i r p 之外的 任何数据结构,则驱动程序必须保证采取合适的同步措施。这就是说使用自旋锁 与其他运行在d i s 脒r c h l e v e l 或低于此i r q l 的驱动程序例程进行协调,以及 使用k e s y n c l l r o n i z e e x e c u t i o n 与中断服务代码进行同步。 虽然i r p 是串行传输的,但是i r _ p 是i o 管理器的共享数据。尤其,i o 管理 器使用p a r a m e t e r s 共同体的字段完成i o 请求。例如,在发出一个有缓冲的请求之 后,它需要将数据从非分页池复制到用户缓冲区。然后,它必须释放池缓冲区。 p a r a m e t e r s 共同体内的一个字段指向该缓冲区。因此,改变此缓冲区指针的值会引 发严重后果。一般而言,如果一个分派例程需要修改i r p 字段,它应当在堆栈上 第四章文件系统监控模块的实现 或在设备扩展中建立一个工作副本。 4 1 3 2 读例程的流程 1 ) 检测设备扩展中的s t o r a g e s t a c k d e v i c e o 巧e c t 是否为n u l l ,如果为n u l l 说 明当前i r p 不是针对一个卷设备,传递i r p 到下层的文件系统驱动。 2 ) 调用函数g e 母i l e f u l l p a i h ( ) ,取文件全路径名。 3 ) 在关键文件表中查找当前文件全路径名及其访问权限。 4 ) 如果有权限访问,就记录访问到日志暂存队列,并传递i r p 到下层的文件系统 驱动。 5 ) 如果无权限访问,就直接返回s t a = 兀7 s a c c e s s _ p e n i e d ,拒绝访问请求。 6 ) 如果在关键文件表中没有当前文件全路径名,就传递i r p 到下层的文件系统驱 动。 4 1 3 3 写例程的流程 1 )检测设备扩展中的s t o r a g e s t a c k d e v i c e o b j e c t 是否为n u l l ,如果为n u l l 说 明当前i r p 不是针对一个卷设备,传递i r p 到下层的文件系统驱动。 2 ) 调用函数g e 匝i l e f u l l p a 也( ) ,取文件全路径名。 3 1 在关键文件表中查找当前文件全路径名及其访问权限。 4 ) 如果有权限访问或者当前卷设备为可移动磁盘,就记录访问到日志暂存队列, 并传递i r p 到下层的文件系统驱动。 5 ) 如果无权限访问,就直接返回s 礤t u s a c c e s s _ _ d e n i e d ,拒绝访问请求。 6 ) 如果在关键文件表中没有当前文件全路径名,就传递i r p 到下层的文件系统驱 动。 4 1 | 3 4 函数g e t f i 】e f u l l p a 廿1 ( ) 取文件全路径名的流程 1 ) 初始化p u n i c o d es t r j n g 参数m 1 1 p a l h ,最后取得的文件全路径名会放在这 个参数中返回。 2 ) 检查参数矗】e o b j e c t 是否为n u l l ,如果为n u l l 就不能得到文件全路径名, 直接返回盘符。 3 ) 调用系统函数k e g e t c u 玎e n t i r q l ( ) 取得当前的i r q l 。如果当前i r q l 大于 a p cl e v e l 就不能得到文件全路径名,直接返回盘
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 软件数据安全保密及第三方服务提供者责任合同
- 初高中教师选调与教育教学改革实施及评价合同
- 研发机构博士后聘用合同与科研成果总结范本
- 2025年学历类自考公共课高等数学(工本)-数量方法(二)参考题库含答案解析(5卷)
- 2025年学历类自考公共课政治经济学(财)-思想道德修养与法律基础参考题库含答案解析(5卷)
- 2025年学历类自考专业(电子商务)计算机与网络技术基础-电子商务与金融参考题库含答案解析(5卷)
- 2025年学历类自考专业(电子商务)电子商务网站设计原理-电子商务概论参考题库含答案解析(5卷)
- 2025年学历类自考专业(电子商务)电子商务与金融-电子商务网站设计原理参考题库含答案解析(5卷)
- 保育老师安全知识培训课件
- 2025年学历类自考专业(法律)金融法-国际经济法概论参考题库含答案解析(5卷)
- 终止妊娠药品规范化管理
- 2025儋州市辅警考试试卷真题
- 代发工资协议书范本5篇
- 期权开户考试题及答案
- 委托代购房屋合同协议
- 温州润益化工有限公司年产6000吨聚甲基丙烯酸甲酯,6000吨甲基丙烯酸甲酯技改项目环境影响报告书
- 2025电商运营培训
- 考研英语一阅读理解真题大全
- 销售经理竞聘述职报告
- 酸雾净化塔安拆施工方案
- 电力行业实施降本增效的方案
评论
0/150
提交评论