一、摘要
- 目的与意义:利用操作系统所学相关知识,实现windows对NTFS盘内容的快速搜索。
- 过程: (1)读取USN: 找出格式为NTFS的磁盘。 获取驱动盘句柄。 创建NTFS磁盘的USN日志。 获取USN Journal 文件的信息。 删除USN日志文件。 枚举所有文件的结果。(可选) (2)构建查找结构: 构建STL模板库中的容器Vector将文件结果存入内存(用Vector存放<文件名,文件目录>)。 构建哈希表(使用STL提供的map库函数)。 将USN Journal文件信息插入容器Vector和哈希表中。 (3)界面: (4)加入线程: 在MFC中启动一个Worker线程。 最小化到通知区域。 (5)查找: 利用通配符进行模糊查找。 大小写、顺序问题。 屏蔽一些系统路径。 路径输出到哈希表中。
- 成果: 已经实现了基本的功能,在系统速度方面优化较少导致速度与理想速度有一些差距。 二、研究背景 Windows的目录结构,在 NTFS 卷中,文件在目录中以 B+树的形式排列,在目录中查找文件时按 B+树的搜索方法先搜索根节点(从根目录开始),然后按要找的文件名与根节点中的子节点对应的文件名相比较以确定在哪个子节点对应的存储区中搜索,然后以子节点为当前的根节点再搜索,直到找到文件为止。 微软系统提供的搜索虽然可以搜索文本内容,但速度十分不理想。大多数情况下,我们只想知道文件存放在电脑的哪个文件夹下,而本程序很好的解决了这一点。 1、NTFS NTFS(New Technology File System)是Windows NT以及之后的Windows的标准文件系统。NTFS取代了文件分配表(FAT)文件系统,为Microsoft的Windows系列操作系统提供文件系统。NTFS对FAT和HPFS(高性能文件系统)作了若干改进,例如,支持元数据,并且使用了高级数据结构,以便于改善性能、可靠性和磁盘空间利用率。 随着以NT为内核的Windows 2000/XP的普及,很多个人用户开始用到了NTFS。NTFS也是以簇为单位来存储数据文件,但NTFS中簇的大小并不依赖于磁盘或分区大小。簇尺寸缩小不但降低了磁盘空间的浪费,还减少了产生磁盘碎片的可能。NTFS支持文件加密管理功能,可为用户提供更高层次的安全保证。 2、设计思路: 读取磁盘全部文件名称作为数据,根据用户输入关键字,在数据中匹配。正确的连同路径一起返回给用户,以方便的打开文件。 具体设计思路如图所示。
哈希表最大的优点,就是把数据的存储和查找消耗的时间大大降低,几乎可以看成是常数时间;而代价仅仅是消耗比较多的内存。然而在当前可利用内存越来越多的情况下,用空间换时间的做法是值得的。另外,编码比较容易也是它的特点之一。 3、什么是USN 程序的重中之重是读取USN。 USN是Update Service Number Journal or Change Journal的缩写,对NTFS卷里所修改过的信息进行相关记录的功能,可以在分区中设置监视更改的文件和目录的数量,记录下监视对象修改时间和修改内容。 当启用USN日志时,对于每一个NTFS卷,当有添加、删除和修改文件的信息时,NTFS都使用USN日志记录下来,并储存为 USN_RECORD 的格式。 4、为什么快速 USN日志相当于WORD目录,提供了索引,当然文章内容发生变化的时候,USN日志会记录下来何时做了修改,但它并不记录里面具体修改了什么东西,所以索引文件很小。而当你想查找文章具体的段落时,你就不用狂转鼠标滚轮,直接看目录即可,定位也只需要按住ctrl+鼠标单击。 同理,当你想查找某一篇文件时,可以直接通过查找USN日志(也就是建立的索引)就知道这个文件是否存在。 PS:windows虽然不是“一切皆是文件”(Unix/Linux 的基本哲学之一),但文件夹也是以文件的形式存在,所以也可以通过USN来查找位置。 三、应用背景 随着计算机技术在人们生活中的深入,人们对计算机的使用越来越多,应用到计算机的领域也越来越多。存储到计算机中的文件呈指数趋势上涨,但是计算机中数量庞大的文件查找起来是非常耗时的,然而现在的windows系统提供的查找功能效率非常低,查找速率非常慢。鉴于这种情况,市场上急需一款高效的文件查询软件来满足日益增长的文件查找需求。 四、实现情况 已经实现了基本的快速查找功能,在系统速度方面优化较少导致速度与理想速度有一些差距。