U盘权限控制-毕业论文_第1页
U盘权限控制-毕业论文_第2页
U盘权限控制-毕业论文_第3页
U盘权限控制-毕业论文_第4页
U盘权限控制-毕业论文_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本科毕业论文(科研训练、毕业设计)题 目:U盘权限控制姓 名:学 院:软件学院系:专 业:软件工程年 级:学 号:指导教师(校内): 职称: 指导教师(校外): 职称: 年 月摘要星网锐捷升腾咨询公司的USB映射技术使得其终端的数据访问方式更加的人性化,但是还存在着一些问题,如USB设备在访问控制上较弱,无法安全地卸载设备等。本次毕业设计就是基于这个问题提出的一个前瞻性的研究,把目标设定在解决USB存储设备的权限控制下。如果获得成功则可以推而广之解决其他USB设备的问题。所以文章首先对项目的背景和所应用到的技术进行了一些简要的描述。接着文章给出了这个USB存储设备权限控制系统的总体构架。它主要是由USB设备的侦测服务程序和虚拟文件夹两部分组成的。USB设备侦测服务程序检测USB设备的插入并对其进行相应的处理。而虚拟文件夹则展示了用户有权限访问的USB存储设备。USB设备侦测程序模块为虚拟文件夹模块构建好环境,然后提供了USB存储设备的相关信息。最后文章对整个系统的详细设计进行了描述,并展示了系统的实现结果。USB的侦测服务程序由三个子模块组成:服务主线程,USB设备的处理子线程,服务的安装和卸载。其中最关键的地方是处理USB设备的子线程,文章对这个部分进行了细致的说明。而虚拟文件夹的实现中,它的整体框架已经由微软定义好了,我们需要做的只是实现其中各接口的纯虚函数。文章对其中的一些重要的函数的实现进行了说明。最后文章把实现后的系统通过图片的形式展现出来。关键字 USB 权限 服务 名字空间扩展AbstractStar Net Centerm Information Ltd.s mapping of USB devices technology makes its terminals data access methods more humanity. However there are still some problems, such as the less control ability on USB devices visit, no method to safely unload equipment and other issues. The graduation project a prospective study is submitted basing on these problems, the target set in addressing USB storage devices under the control of the authority. If successful it could by extension other USB devices to solve the problem. So article first introduces the projects background and the techniques used in project.Then this article describes the USB storage device access control systems overall architecture. It is mainly constructed by two modules: the USB device detection service and the virtual folder. The USB device detection service detects USB device insertion and does its corresponding treatment. The virtual folder will demonstrate the USB storage device the user could visit. USB device detection program module builds a good environment and provides the USB storage device related information for virtual folder module.Finally the article provides the whole system design of the detailed description and display of the system to achieve results. USB detection service procedure module is constructed by three sub modules: the main thread of the service, the sub thread of USB devices handling, installation services and deletion. The most crucial part is the sub thread of USB devices handling, the article describes the part in detail. In the realization of virtual folder, its overall framework has been well defined by Microsoft, what we need to do is only the realization of the pure virtual functions of the interfaces. The article describes the realization of some important functions. Finally the article shows the system realized in the form of picture. Key words USB Right Service Namespace Extension目录第一章 引言1第二章 技术背景32.1 Windows服务32.1.1 服务程序简介32.1.2 服务程序与其他程序的区别32.1.3 服务程序的生存期42.2 Windows安全机制42.2.1 Windows系统的安全组件52.2.2 Windows安全子系统的组件62.3 Windows NTFS文件系统72.3.1 NTFS简介72.3.2 NTFS的任意安全访问控制72.3.3 NTFS的卷挂载点(Volume Mount Point)82.4 Windows COM技术82.4.1 COM技术简介82.4.2 COM接口92.5 Windows Shell 编程92.5.1 windows shell 简介92.5.2 windows shell的扩展10第三章 总体设计113.1 系统的整体框架113.1.1 整个程序的行为113.1.2 程序的整体框架123.2侦测服务程序的总体设计133.2.1 原理图133.2.2 原理说明133.2.3 主要的数据结构和函数143.3 虚拟文件夹的总体设计153.3.1 原理图153.3.2 原理说明163.3.3 主要的数据结构和函数17第四章 详细设计和实现194.1 侦测服务程序的详细设计和实现194.1.1 侦测服务主线程194.1.2 处理USB设备的子线程244.1.3 服务程序的安装和卸载304.2 虚拟文件夹的详细设计和实现324.2.1 Dll入口模块322.2.2 ClassFactory模块354.2.3 IShellFolder模块374.2.4 IShellView模块404.2.5 IEnumIDList模块424.2.6 IContextMenu模块434.2.7 IExtractIcon模块454.2.8 PIDL操作工具模块474.2.9 数据文件操作模块512.2.10 其他工具模块544.3 系统的最终实现效果564.3.1 我的电脑下的显示564.3.2 资源管理器模式574.3.3 普通浏览模式57结论58致谢59参考文献60ContentChapter 1 Introduction1Chapter 2 Background Knownledge32.1 Windows Service32.1.1 Intruction of Service32.1.2 The Different between Service and Simple Application32.1.3 The Life Cycle of Service42.2 The Security Mechanism of Windows42.2.1 Security Components of Windows System52.2.2 The Component of Windows Security Sub System62.3 indows NTFS File System72.3.1 Introduction of NTFS72.3.2 The Arbitrary Access Control of NTFS72.3.3 Volume Mount Point of NTFS82.4 Windows COM Technology82.4.1 The Introduction of COM Technology82.4.2 COM Interfaces92.5 Windows Shell Programming92.5.1 The Introduction of Windows Shell92.5.2 The Extension of Windows Shell10Chapter 3 Main Design Principles113.1 The Introduction of Realization113.1.1 The Behaver of The Application113.1.2 The View of the Whole Application123.2 The Main Design of The Detecting Service133.2.1 The Principle Graph133.2.2 The Explanation of Principle133.2.3 Data Structures and Functions143.3 The Main Design of Virtual Folder153.3.1 The Principle Graph153.3.2 The Explanation of Principle163.3.3 Data Structures and Functions17Chapter 4 Design and Realization in Detail194.1 The Desgin and Realization in Detail of Detecting Service194.1.1 Main Thread of Service194.1.2 The Processing USB Device Sub Thread244.1.3 The Install and Deletion of The Service304.2 The Desgin and Realization in Detail of Virtual Folder324.2.1 Dll Entry Module322.2.2 ClassFactory Module354.2.3 IShellFolder Module374.2.4 IShellView Module404.2.5 IEnumIDList Module424.2.6 IContextMenu Module434.2.7 IExtractIcon Module454.2.8 PIDL Operation Utility Module474.2.9 Data Files Operation Utility Module512.2.10 Other Utility Module544.3 The Realized System564.3.1 The Display in My Computer View564.3.2 Explore Mode574.3.3 Simple Brower Mode57Summary58Acknowledgement59References60VI第一章 引言星网锐捷升腾资讯公司是一家主要从事网络计算机(终端)的研发和生产的企业。在网络高速发展的今天,关于网络的应用也得到了空前的发展。表现在行业领域的其中一个重要方面就是当前非常热门的一个词语数据集中,就是把各个网点的数据集中保存在总部或者某地。目前的外设发展也很快,出现了很多不同类型的接口,它们之间彼此不能兼容,如串口,并口,1394,USB等。其中USB形式的外设有逐渐取代其他类型一统外设接口领域的趋势。这就对公司的产品生产提出了要求。也就是在这种环境下,升腾推出了USB映射技术。USB映射技术就是把终端上连接的USB设备映射到终端服务器上,通过终端服务器上的驱动程序来驱动USB设备。形象点的描述就是一个用户在一台登录到了服务器的终端上插入一个USB设备,就好像直接在终端服务器上插入了USB设备一样。但是这个技术现在还存在一些不足的地方,如毕设中处理的U盘为例,主要表现在:1、 映射的U盘对所有用户都可见:就是说任何登录这台服务器的用户都可以看到这个U盘,并且可以进行读写。2、 用户无法判断哪个U盘属于自己:当用户们插入了大量的U盘后,这个映射系统对各U盘没有非常明显的表示USB设备的归属的特征。所以用户在一大堆U盘中要找出属于自己插入的那个很困难。3、 当使用远程登录的时候,用户的终端上是不会出现任务栏右下角的安全删除的图标。若把“装载/卸载驱动程序”的权限给所有的用户,则可以显示出该图标,但会导致不安全因素,任何人都可以卸载就会出现A的U盘被B给卸载的情况;还有一种处理方式是禁止磁盘写缓存,这样就可以直接拔出USB设备,但是这样一是麻烦,每次U盘插入都要禁止一次;而且也不符合用户的使用习惯。所以此次毕设的目的就是解决U盘的这个问题,具体为:1. 在程序安装时在我的电脑下建立一个虚拟的根目录。2. 当有新U盘插入时不让它直接显示在我的电脑下,而是在虚拟根目录上建立一个新的文件夹,将该U盘的内容挂载到此文件夹下,并且将文件夹的权限设置为只允许管理员以及当前登陆的用户使用。3. 右键单击U盘挂载的文件夹,弹出菜单允许用户安全的删除硬件。这样就给出了一个安全删除的途径。这个问题得以解决,就可以推而广之解决其他USB设备的相应问题。从而使公司在竞争中获得先机。第二章 技术背景此次毕设的内容的牵涉了一些相关的技术点,现在简要描述如下:2.1 Windows服务12.1.1 服务程序简介Microsoft Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序。这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。这些功能使服务非常适合在服务器上使用,每当需要使用不会影响在同一台计算机上工作的其他用户的功能时也适用。还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务。通过创建作为服务安装的应用程序,可以轻松地创建服务。例如,假设要监视性能计数器数据并对阈值做出反应。可以编写一个侦听性能计数器数据的 Windows 服务应用程序、部署该应用程序并开始收集和分析数据。2.1.2 服务程序与其他程序的区别服务应用程序与其他许多项目类型的功能在几个方面有所不同: 1. 必须将服务应用程序项目创建的已编译可执行文件安装在服务器上,此项目才能以有意义的方式运行。不能通过按 F5 或 F11 来调试或运行服务应用程序;不能立即运行服务或进入其代码。相反,必须安装和启动服务,然后将一个调试器附加到服务的进程中。2. 与一些类型的项目不同,对于服务应用程序,必须为其创建安装组件。安装组件在服务器上安装和注册服务,并用 Windows“服务控制管理器”为服务创建一个项。3. Windows 服务应用程序在不同于登录用户的交互区域的窗口区域中运行。窗口区域是包含剪贴板、一组全局原子和一组桌面对象的安全对象。由于 Windows 服务的区域不是交互区域,因此 Windows 服务应用程序中引发的对话框将是不可见的,并且可能导致程序停止响应。同样,错误信息应记录在 Windows 事件日志中,而不是在用户界面中引发。 4. Windows 服务应用程序在各自的安全上下文中运行,并且在用户登录到安装有该程序的 Windows 计算机之前启动。应仔细计划在哪些用户帐户内运行服务;在系统帐户下运行的服务比在用户帐户下运行的服务具有更多的权限和特权。2.1.3 服务程序的生存期服务在其生存期内要经历几个内部状态。首先,将服务安装在将要运行它的系统上。此过程执行服务项目的安装程序,并将服务加载到该计算机的“服务控制管理器”中。“服务控制管理器”是由 Windows 提供的管理服务的核心实用工具。 服务加载后,必须启动。启动服务使服务开始运行。可以从“服务控制管理器”、从“服务器资源管理器”或从代码启动服务。运行的服务可以以这种状态无限期地存在下去,直到它被停止或暂停或者计算机关闭。服务可以以三种基本状态之一存在:Running、Paused 或 Stopped。服务还可以报告挂起命令的状态:ContinuePending、PausePending、StartPending 或 StopPending。这些状态指示命令已经发出(如暂停正在运行的服务的命令),但尚未执行。可以从“服务控制管理器”、从“服务器资源管理器”或通过从代码调用方法来暂停、停止或继续服务。每种操作都可以调用服务中的一种相关过程,在其中可以定义当服务状态更改时所执行的其他处理。2.2 Windows安全机制2图 1 windows安全组件2.2.1 Windows系统的安全组件对于Windows系统来讲,系统的安全性主要体现在系统的组件的功能上。如图1所示,Windows提供5个安全组件,保障了系统的安全性。Windows系统组件体现在很多方面,例如Windows用户策略,访问控制的判断,对象的重用,强制登陆等。访问控制的判断(Discretion access control):如图一所示,访问控制是在第二层上,安全性级别为普通。访问控制的判断允许对象所有者可以控制谁被允许访问该对象以及访问的方式。对象重用(Object reuse): 如果您正在阅读一篇本地的文章,例如是DOC文件,那么,在你阅读的同时,又想将该文件打包传送给其他人,这时候进行打包的工作是不被允许的,当你执行该工作时,系统回提示您该文件正在被另一个程序所使用。当资源(内存、磁盘等)被某应用访问时,Windows 禁止所有的系统应用访问该资源,这也就是为什么无法恢复已经被删除的文件的原因。强制登陆(Mandatory log on):该类方式运用的最多的地方该属活动目录(Active Directory),如果在域控制器(DC)限制用户登陆的方式,要求所有的用户必须登陆,那么通过认证后才可以访问系统资源。审核(Auditing):打开管理工具种的“事件查看器”,点击“安全性”,这里就可以看到本地计算机登陆的审核列表。如果登陆该计算机失败,管理员就很快可以确定是否时恶意入侵等其他信息。在控制用户访问资源的同时,也可以对这些访问作了相应的记录。对象的访问控制(Control of access to object):在NTFS文件系统种,对方访问控制做得非常的到位。选择一个文件夹单击右键选择“属性”,在“安全”选项里可以看到用户所具有的权限值。NTFS文件系统很好的解决了多用户对资源的特级访问权限。要访问资源,必须是该资源允许被访问,然后是用户或应用通过第一次认证后再访问。2.2.2 Windows安全子系统的组件安全标识符(Security Identifiers):对于SID,大家一定不会陌生。简单来说就是每次当我们创建一个用户或一个组的时候,系统会分配给改用户或组一个唯一SID,当你重新安装系统后,也会得到一个唯一的SID。SID是唯一的,不随用户的删除而分配到另外的用户使用。请记住,SID永远都是唯一的SIF是由计算机名、当前时间、当前用户态线程的CPU耗费时间的总和三个参数决定以保证它的唯一性。例: S-1-5-21-1763234323-3212657521-1234321321-500访问令牌(Access tokens):在很多网络培训教程都有详细的介绍。当用户通过验证后,登陆进程会给用户一个访问令牌,该令牌相当于用户访问系统资源的票证,当用户试图访问系统资源时,将访问令牌提供给Windows 系统,然后Windows NT检查用户试图访问对象上的访问控制列表。如果用户被允许访问该对象,系统将会分配给用户适当的访问权限。访问令牌是用户在通过验证的时候有登陆进程所提供的,所以改变用户的权限需要注销后重新登陆,重新获取访问令牌。安全描述符(Security descriptors):Windows 系统中的任何对象的属性都有安全描述符这部分。它保存对象的安全配置。访问控制列表(Access control lists):访问控制列表有两种:任意访问控制列表(Discretionary ACL)、系统访问控制列表(System ACL)。任意访问控制列表包含了用户和组的列表,以及相应的权限,允许或拒绝。每一个用户或组在任意访问控制列表中都有特殊的权限。而系统访问控制列表是为审核服务的,包含了对象被访问的时间。访问控制项(Access control entries):访问控制项(ACE)包含了用户或组的SID以及对象的权限。访问控制项有两种:允许访问和拒绝访问。拒绝访问的级别高于允许访问。2.3 Windows NTFS文件系统2.3.1 NTFS简介NTFS是“新技术文件系统”的缩写。微软推出NTFS文件系统就是为了弥补FAT文件系统的一些不足,其中最大的改进是容错性和安全性能。容错性:NTFS可以自动地修复磁盘错误而不会显示出错信息。Windows 2000向NTFS分区中写文件时,会在内在中保留文件的一份拷贝,然后检查向磁盘中所写的文件是否与内存中的一致。如果两者不一致,Windows就把相应的扇区标为坏扇区而不再使用它(簇重映射),然后用内存中保留的文件拷贝重新向磁盘上写文件。如果在读文件时出现错误,NTFS则返回一个读错误信息,并告知相应的应用程序数据已经丢失。安全性:NTFS有许多安全性能方面的选项,可以在本机上和通过远程的方法保护文件、目录。NTFS还支持加密文件系统(EFS),可以阻止没有授权的用户访问文件。文件压缩:NTFS文件系统带来的另一个好处是支持文件压缩功能,用户可以选择压缩单个文件或整个文件夹。磁盘限额:磁盘限额功能允许系统管理员管理分配给各个用户的磁盘空间,合法用户只能访问属于自己的文件,Windows 2000中的磁盘限额功能是基于用户和卷的。2.3.2 NTFS的任意安全访问控制3NTFS能够指定谁能访问某一文件或目录和对它作什么操作。在创建一个文件时,可以通知Windows NT,哪些用户可以读该文件,哪些用户可以修改该文件;另外,还可以指定谁可以列出一个目录的内容和谁可以在该目录下增加文件。即使用户知道文件的路径,仍可以禁止访问目录中的文件,只有NTFS分区中的文件才有这种称为任意访问控制的能力。2.3.3 NTFS的卷挂载点(Volume Mount Point)4 NTFS5.0以及以后的的版本支持卷挂载点。所谓卷挂载点就是文件夹,这些在某个卷上的文件夹可以被应用程序用来挂载另外一个卷,也就是一个文件夹的实际所指向的位置可以由用户自由指定。当一个卷被挂载到一个挂载点上以后,用户和程序就可以通过引用这个挂载点的路径来引用这个被挂载的卷。例如一个用户可以引用C:mntDdrive 来引用其实际的D:。 通过使用卷挂载点,你可以把各种不同的文件系统如NTFS5.0,FAT16,FAT32,ISO-9660文件系统等统一到一个逻辑的文件系统中。不管是用户还是应用程序都都不需要某个特定的文件其实际存在的卷的信息,所需要的只是一个完整的路径。这样卷就可以被重排列,替代或者细分为多个卷而不需要用户或者程序做任何的修改。2.4 Windows COM技术2.4.1 COM技术简介5微软的COM是一个平台无关,分布式,面向对象的系统。它主要用于用于创建可以相互关联的二进制的软件组件。COM技术是微软的OLE,ActiveX等其他技术的基础。 COM技术不是一个面向对象的计算机语言,而是一个规范。它没有规定一个应用程序必须符合某种特殊的结构,对于构建应用软件所使用的语言,结构和实现的细节全都由程序员自由掌控。而COM定义了一个对象模型喝一些编程的要求以便这些产生的组件可以和其他的组件进行互相联系。这些需要联系的组件可以在一个进程中,也可以在其他进程中,甚至可以在远程的一台主机上。他们可以由不同的语言实现,并且很可能他们的构架也不同。这也就是COM被称为二进制标准的缘故,这是一个作用于程序被转换成的二进制机器代码上的标准。 COM对于语言的唯一要求就是实现COM的语言必须能够显示或者隐式的创建指针的结构,并且函数是通过指针来调用的。虽然面向对象的语言如微软的Visual C+和SmallTalk提供了简化COM组件实现的机制,但是如C语言, Pascal, Ada, Java,甚至是BASIC语言都可以用来创建和使用COM组件。 COM定义了COM组件的最本质的特性。总体来说,一个软件组件是由一组数据和操作这些数据的方法构成的。一个COM组件是一种只能唯一通过一组或者多组相关联的函数。这些函数组被称为接口,而接口里的函数被称为方法。更进一步,COM要求获取一个接口的方法的唯一方式是通过这个接口的指针。除此定义了了二进制组件的基本标准之外,COM还定义了一些基本的接口。这些接口提供了所有基于的COM的技术所共有的功能。此外它还提供了一小部分的API函数,这些函数是所有的组件都需要的。COM还定义了组件是如何在一个分布的环境中协调工作的,同时加入了一些安全特性以保证系统和组件的完整性。2.4.2 COM接口6COM接口是COM规范中最重要的部分,COM规范的核心内容就是对接口的定义,甚至可以说“在COM中接口就是一切”。组件与组件之间、组件与客户之间都要通过接口进行交互。接口成员函数将负责为客户或其他组件提供服务。与标识COM对象的CLSID类似,每一个COM接口也使用一个GUID来进行标识,该标识也被称为IID(interface identifier,接口标识符)。COM接口实际限定了组件与使用该组件的客户程序或其他组件所能进行的交互方式,任何一个具备相同接口的组件都可对此组件进行相对于其他组件透明的替换。只要接口不发生变化,就可以在不影响整个由组件构成的系统的情况下自由的更换组件。通常在程序设计阶段需要将接口设计的尽可能完美,以减少在开发阶段对COM接口的更改。尽管如此,在实际应用中是很难做到这一点的,往往需要在现有接口基础上对其做进一步的发展。与C+中对类的继承有些类似,对COM接口的发展也可以通过接口继承来实现。但是COM接口的继承只能是单继承而不允许从多个基接口进行派生,而且派生接口只是继承了对基接口成员函数的说明而没有继承其实现。2.5 Windows Shell 编程72.5.1 windows shell 简介Shell就是一个操作系统提供给用户的用户界面,以便用户可以进行一些普通的工作,如访问文件系统,运行程序,更改系统的设置等等。在MS-DOS中,C这个程序扮演着这个角色。但是windows一直是一个图形化的环境,所以他的shell毫无疑问也必须是图形化界面。在windows95以前,这个shell程序就是一个程序管理器的软件。程序控制器是一种中央控制台,通过它你可以启动程序,记录和重排列图标,或者一些其他的工作。换句话说,程序控制器就像它名字所叫的那样,是一个管理所有在这个windows操作系统下安装的程序的管理器。和程序管理器肩并肩存在于系统的是一个叫做文件管理器的软件。它主要是用来操作文件系统的。在windows95推出后,Explorer取代了这两个旧的工具,并且整合了他们两个的功能。一个对于Explorer的普遍误解是以为Explorer就是一个当我们双击我的电脑想浏览文件系统或者右键单击开始按钮时启动的那个程序。事实上,Explorer是始终都是运行的。从启动开始一直到你关机。我们以为的Explorer只是一个由添加到Explorer进程中的一个新的线程建立的新的窗口。Explorer其实是一个实现了windows Shell的可执行模块。2.5.2 windows shell的扩展基本来说存在着两种类型的对于Explorer的扩展:Shell Extension和namespace extension。他们的名字有一点令人迷惑。Explorer就是windows shell,所以两种类型都可以被认为是对于shell的扩展。另一方面,Shell extension和Namespace Extension都是用于扩展Explorer的功能,但是他们有一些区别。一个Shell Extension就是一个用于在某种类型的文件在Explorer视图上显示时定制其行为的一种扩展。鉴于这一点,我们可以叫它为Shell的视图扩展。这些定制的行为由一些事件来触发,比如右键单击某文件,显示属性对话框等等。你可以为这些事件定制你自己的处理函数。例如你可以为bmp格式选定一种图标用于显示这种格式的文件,或者为某种类型的文件增加一个右键菜单的选项。一个Namespace Extension可以为以下两种子类型中的一种。如果你把这个Namespace Extension和某一特定类型的文件相关联,那么他的功能等价于作用在这种类型的文件上的右键菜单,只不过实现的代码比上面提及的Shell Extension来的复杂。另一种子类型是当你把它和某个文件夹相关联的时候,这个文件件就成为了一个可定制的文件夹。你可以通过编码来决定这个文件夹里的内容,他们显示的图标,排序的方式,右键菜单等等。第三章 总体设计3.1 系统的整体框架3.1.1 整个程序的行为毕设需要处理的是USB设备从插入到卸载的整个生命周期。首先,在我的电脑下建立一个Centerm Disk Array的虚拟文件夹(这个虚拟文件夹对应了实际的某个NTFS分区下的某个实体文件夹),以便用于显示我们需要展现给用户的USB设备。当USB设备插入时,我们的程序侦测到USB设备的插入,然后判断此USB设备的类型。如果此USB设备是USB存储设备的话,则获取此设备的相应信息。然后在实体文件夹下建立相应的文件结构,并建立此设备信息的数据文件。然后卸载掉默认的设备挂载点(即我的电脑下出现的某盘符),然后把此设备挂载到我们在实体文件夹下建立的文件夹。当用户双击打开我们建立在我的电脑下的虚拟文件夹时,程序搜索实体文件夹,找到当前用户有权限访问的USB存储设备,并在虚拟文件夹下显示。然后用户就可以像在我的电脑下一样,双击某个USB存储设备打开此设备进行想要的文件操作。如果用户需要卸载USB存储设备,只需在虚拟文件夹下的此设备图标上右键单击,选择弹出右键菜单上的安全卸载就可以安全的卸载此设备。在用户选择了安全删除后,程序删除了在此设备插入时在实体文件夹下建立的文件夹和数据文件,并恢复系统默认的挂载点。由于实体文件夹都设置了相应的访问权限,并且系统默认的挂载点已经删除,而虚拟文件夹中的USB设备显示由程序控制,这就保证了只有当前用户和系统管理员有访问和卸载这些设备的权限,而其他用户则根本无法进行任何操作。3.1.2 程序的整体框架从上面可以看出,整个程序可以分为两个大的模块:侦测服务程序和虚拟文件夹的Namespace Extension。这两个程序之间的交互主要就是侦测服务提供设备的信息给虚拟文件夹(通过建立设备信息的数据文件,然后虚拟文件夹读取这些数据)。如下图所示:图 2 U盘权限控制系统总体框架图3.2侦测服务程序的总体设计3.2.1 原理图侦测服务程序主要包括服务主线程和处理USB设备插入的子线程两部分:图 3 USB设备侦测服务程序原理图3.2.2 原理说明侦测服务主线程进行的主要工作就是检测系统的设备变化,当有新的USB设备插入时,它就启动一个新的线程,把此设备设备路径(device path)作为参数传给新线程,然后由这个新线程对这个设备进行处理。而主线程返回,继续进行检测。处理USB存储设备的新线程先获取设备的相关信息,这一步包括获取USB存储设备的所对应的默认挂载点的盘符(即当USB存储设备插入后,在我的电脑下显示的盘符),然后获取该设备的卷名(Volume Name),最后获取当前用户的名字。然后把他们连同主线程传过来的Device path,写入一个结构体中。(定义见后)这个结构中,除了path成员没有获取外,其他成员都已经赋值了。然后将这个结构传给下一步:构建相应的文件结构。这一步首先先设置安全变量,然后用这个安全变量去创建相应的文件夹,最后将path成员进行填写,将整个结构写入到数据文件info.dat中。在此之后程序把设备挂载到实体文件夹上,然后删除系统默认的挂载点。3.2.3 主要的数据结构和函数用于描述USB存储设备的相关信息的结构(也是用来存储PIDL的数据):#define USERNAMELEN 30typedef struct _PIDLDATA TCHARvolumeName50;/ 设备的卷名 TCHARuserNameUSERNAMELEN;/ 当前用户名 TCHARUSBDevicePathMAX_PATH;/ 设备的设备路径 TCHARpathMAX_PATH;/ 该设备对应的实体文件夹的路径 TCHARdriverLetter;/ 默认的挂载点盘符 PIDLDATA;typedef PIDLDATA* LPPIDLDATA;在这个模块中,用到了几个重要的函数,其描述如下:表3 - 1 USB设备侦测服务程序主要函数函数名功能描述USBDevProc用于对侦测到的USB存储设备进行相应的处理(获取信息,挂载等)RetrieveUSBDevInfo获取USB设备的相关信息,并填写lpPidlData的相应表项CreateDirEnv建立相应的文件夹环境3.3 虚拟文件夹的总体设计3.3.1 原理图 虚拟文件夹的框架结构其实已经由微软设定好了,我们要做的只是决定实现其中的哪些接口,这些接口里面的哪些纯虚函数,以及如何实现的问题。在这里,在毕设中实现了IShellFolder,IContextMenu,IExtractIcon,IShellView,以及IEnumIDList接口。下图是整个虚拟文件夹的整体实现的原理图:图 4 虚拟文件夹原理图3.3.2 原理说明各模块功能的简要描述:DLL入口模块向系统的Explorer提供相应的接口,以便它能够调用我们实现的Namespace ExtensionClassFactory模块向系统提供调用IshellFoler模块的途径IShellFolder模块 整个实现的中枢,用于管理整个虚拟文件夹行为引出IcontextMenu,IshellView,IextractIcon,IEnumIDList模块IContextMenu模块提供右键菜单(打开,资源管理器,安全卸载)IShellView模块提供虚拟文件夹的视图展示,显示虚拟文件夹的内容IExtractIcon模块提供虚拟文件夹中内容的图标的个性化显示IEnumIDList模块用于枚举虚拟文件夹中的内容PIDL操作工具模块用于PIDL(Explorer中唯一标识系统中成员的标识符)的操作数据文件操作工具模块用于查找系统中的数据文件的位置,以及对数据文件进行的操作其他工具模块 其他的类型不明显的工具函数 由上面的原理图可以看出,系统的Explorer通过Dll入口模块的DllGetClassObject函数获取ClassFactory的指针,然后通过ClassFactory的QueryInterface函数获取系统需要的接口的指针。ClassFactory可以调用CreateInstance函数获取IshellFolder 的指针。然后通过IshellFolder的指针就可以获取其他的实现的接口指针(如:IshellView)。此外,我们还将关于PIDL的操作提炼成一个类,专门用来进行PIDL的相关操作。同时还有关于数据文件的的搜索和读取的操作模块,以及其他工具模块。3.3.3 主要的数据结构和函数在这里用到的数据结构有用于存储PIDL数据信息的数据结构(在侦测程序的数据结构那节已经列出,这里省略)和IEnumIDList模块中用于保存虚拟文件夹中个成员的PIDL的单链表节点结构。/ 用于存储各元素的PIDL的链表节点的数据结构typedef struct tagENUMLIST struct tagENUMLIST *pNext; LPITEMIDLIST pidl; ENUMLIST, FAR *LPENUMLIST;虚拟文件夹中很多的函数都是继承自系统的纯虚类,这里面的函数再次就不一一列出,具体的描述请参阅MSDN。这里列出一些比较重要的函数的描述:表3 - 2 虚拟文件夹主要函数函数名功能描述DllRegisterServer注册名字空间扩展BindToObject获取子文件夹的IShellFolder接口EnumObjects枚举文件夹中的成员GetUIObjectOf获得与用户界面有关的对象CreateViewObject为Shell提供视图对象OnContextMenu实现右键菜单的功能CreateEnumList建立一个包含了所有枚举出来的对象的单链表DoOpen以普通模式进行浏览DoExplore以资源管理器模式进行浏览DoUnmount卸载挂载的USB存储设备Create通过数据文件的路径创建一个PIDLGetPIDLDataFromFile从一个指定数据文件的路径中得到PIDLDATAFindVolumeMountPoint通过数据文件来找到该数据文件所对应的设备的挂载点GetPathFromPidlData通过PIDLDATA获取挂载点的路径第四章 详细设计和实现4.1 侦测服务程序的详细设计和实现4.1.1 侦测服务主线程函数清单:表4 - 1 侦测服务主线程主要函数函数名功能描述Main设置服务的入口表ServiceMain服务程序的主函数ServiceCtrlHandler服务程序的控制处理函数Main函数图 5 Main函数原理图Main函数主要的工作是进行设置服务的入口表,所以它的实现很简单,先设置一个服务的入口,然后在后面加入NULL表示这个表的结束。代码如下:(SERVICENAME是预先定义好的表示服务名的宏)SERVICE_TABLE_ENTRY DispatchTable = SERVICENAME, ServiceMain , NULL , NULL ;StartServiceCtrlDispatcher( DispatchTable );ServiceMain函数图 6 ServiceMain函数原理图ServiceMain的主要工作是注册服务的控制处理函数,然后设置服务的状态,接着

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论