当前位置:文档之家› 基于TDI的网络虚拟磁盘驱动研究与实现

基于TDI的网络虚拟磁盘驱动研究与实现

收稿日期:2005-11-16作者简介:刘立辉(1981-),男,河北人,硕士研究生,研究方向为计算机网络技术及其应用;李 健,教授,研究方向为网络技术及信息安全。

基于TD I 的网络虚拟磁盘驱动研究与实现刘立辉,李 健,朱良峰,庄俊玺(北京工业大学计算机学院,北京100022)摘 要:应个人网络存储应用的需要,研究和开发网络虚拟存储系统。

实现这种系统的关键是开发网络虚拟磁盘驱动。

通过介绍在Windows N T 内核模式下设计虚拟磁盘驱动的详细原理,分析和研究网络虚拟磁盘驱动的设计与实现。

开发过程中,调用TDI (Transport Driver Interface )函数,实现了网络虚拟磁盘驱动的网络功能。

使用此方法开发虚拟存储系统,由于是基于Windows 内核的开发,所以网络传输效率较高;另外,基于此技术的虚拟存储系统,没有改变用户的使用习惯,所以大大方便了用户的使用。

关键词:传输驱动接口;虚拟磁盘;网络磁盘;内核模式驱动中图分类号:TP393.01 文献标识码:A 文章编号:1673-629X (2006)08-0200-04R esearch and R ealization of TDI -B ased N et work Virtual Disk DriverL IU Li 2hui ,L I Jian ,ZHU Liang 2feng ,ZHUAN G J un 2xi(College of Computer Science ,Beijing University of Technology ,Beijing 100022,China )Abstract :To deal with the need of the personal network storage application ,research and develop the network virtual storage system.The most important thing to realize the system is to develop a network virtual disk driver.Introduce the principle of virtual disk driver under Windows N T kernel mode.Analyze and research how to design and develop the network virtual disk driver.During the developing ,TDI (Transport Driver Interface )functions have been used to realize the network functions.Virtual storage system using this method ,has bet 2ter efficiency in network transport because it is developed based on Windows kernel mode.In addition ,the virtual storage system based on this technology is easy to use because it has not change the habits of the users.K ey w ords :TDI ;virtual disk ;network disk ;kernel mode driver 随着网络的普及,网络技术针对个人应用的比例越来越高,例如电子邮箱、个人主页空间、个人网络空间。

近来,应用户移动办公的需要,网络虚拟磁盘技术得到了广泛应用。

应用这种技术,用户把自己的文档存储在网络磁盘上,随时随地进行存取和编辑,使用方便快捷。

实现这种技术的关键是开发网络虚拟磁盘驱动。

1 网络虚拟磁盘驱动功能分析Windows 用户为了更加方便地管理自己的文件,常常应用虚拟磁盘。

方法是把某些文件或目录镜像为逻辑磁盘(即虚拟磁盘),然后把文件存放在虚拟磁盘里,以便于管理。

这些磁盘,有的显示为资源管理器里的盘符,有的有独立的界面,使用方便快捷。

网络虚拟磁盘技术就是在这种虚拟磁盘技术的功能之上加入网络功能,简言之,就是把网络上的存储空间虚拟为本地逻辑磁盘的技术。

网络虚拟磁盘技术有多种实现方式,主要有:一,以Web 方式使用;二,客户端程序的形式;三,在本地资源管理器显示盘符。

对比这几种方式,方式三有着其他两种方式不可比拟的优点,使用方便,不用改变用户的操作习惯;功能强大,可以模拟本地磁盘;界面简洁,易于管理。

文中将研究第三种方式的一种实现方法。

根据需求,网络虚拟磁盘驱动应该满足以下两点功能,第一,能够实现虚拟功能,可以模仿本地磁盘;第二,能够实现网络传输,对网络上的文件或目录进行虚拟,并把操作命令和数据发到空间服务器上。

2 网络虚拟磁盘驱动在Windows NT 中的位置2.1 Window s NT 分层驱动原理Windows N T 提供了一种分层的体系结构,每一个N T 设备驱动程序都有一个下层接口和一个上层接口。

低层的驱动程序直接控制硬件。

在低层和上层驱动程序之间的是中间层驱动程序[1]。

Windows N T 的这种驱动程序体系,在Windows 98和Windows 2000中得到了继承和扩展,形成了现在的WDM 体系。

这使得在WindowsN T 平台下,开发网络虚拟磁盘驱动成为可能。

第16卷 第8期2006年8月 计算机技术与发展COMPU TER TECHNOLO GY AND DEV ELOPMEN T Vol.16 No.8Aug. 2006WDM 使用了分层的驱动程序结构,而且WDM 是基于对象的。

为了便于对硬件的管理,WDM 里对每一个单一的硬件引入了一些数据结构:物理设备对象(PhysicalDevice Object ),简称为PDO ;功能设备对象(Function De 2vice Object ),简称为FDO ;过滤设备对象(Filter Device Ob 2jects ),简称为FiDO 。

在数据结构栈中的每一个对象都属于一个特定的驱动程序,PDO 属于总线驱动程序,FDO 属于功能驱动程序,FiDO 属于过滤驱动程序(如图1所示[2])。

图1 分层驱动程序结构每个操作都使用I/O 请求包。

IRP 先被送到设备堆栈的最上层驱动程序,然后再逐渐过滤到下面的驱动程序。

每一层驱动程序都可以决定如何处理IRP 。

不同位置的驱动程序扮演了不同的角色,总线驱动程序管理计算机与PDO 所代表的设备的连接。

功能驱动程序管理FDO 所代表的设备。

过滤器驱动程序用于监视和修改IRP 流。

2.2 分层结构中的网络虚拟磁盘驱动虚拟磁盘驱动属于过滤器驱动程序,它的功能是修改IRP 流。

具体就是把对文件的位置请求,经过处理,指定到真实的磁盘位置,并把命令和数据传递下去。

现在分析三种情况下,文件操作中对驱动程序的调用过程。

通过三种情况的比较,解释网络虚拟磁盘驱动程序在Windows N T 系统结构中的位置及所起的作用。

结合图例对比如下(注:图2、图3、图4省略了细节和一些与此处说明无关的过程。

):(1)访问DOS 分区逻辑磁盘中的文件(如图2所示)。

如,打开C :\MyPackage \Myfile.doc 。

用户通过使用打开文件的高级函数调用Win32API 函数访问系统服务,系统服务程序首先调用文件系统驱动找出文件的逻辑位置,文件系统驱动再调用磁盘驱动转换为磁盘的物理位置,找到该文件,执行打开操作。

↓文件系统驱动↓磁盘驱动图2 访问DOS 分区逻辑磁盘中的文件(2)访问本地虚拟磁盘中的文件(如图3所示)。

如,打开I :\MyPackage \Myfile.doc ,其中I :是由DOS 分区逻辑磁盘D :中的一个镜像文件FileDisk.img 虚拟成的逻辑磁盘。

用户通过使用打开文件的高级函数调用Win32API 函数访问系统服务,系统服务程序首先调用文件系统驱动找到文件的逻辑位置,文件系统驱动再调用虚拟磁盘驱动,将访问磁盘的逻辑位置转换为访问镜像文件的逻辑位置,再调用文件系统驱动找到镜像文件所在逻辑磁盘的逻辑位置,然后调用磁盘驱动转换为磁盘的物理位置,执行打开操作。

↓文件系统驱动↓虚拟磁盘驱动↓文件系统驱动↓磁盘驱动图3 访问本地虚拟磁盘中的文件(3)访问网络虚拟磁盘中的文件(如图4所示)。

例如,G:\MyPackage \Myfile.doc ,其中,G:是由远程磁盘上的镜像文件FileDisk.img 虚拟的。

用户通过使用打开文件的高级函数调用Win32API 函数访问系统服务;系统服务程序首先调用文件系统驱动程序找到文件的逻辑位置,即G 盘上的逻辑位置;文件系统驱动调用虚拟磁盘驱动,将访问磁盘的逻辑位置信息及操作命令和数据交给网络协议驱动;网络协议驱动调用网卡驱动将位置信息操作命令及数据发送到远程服务器上,远程服务器负责完成打开文件的操作,并把操作结果返回。

图4 访问网络虚拟磁盘上的文件3 网络虚拟磁盘驱动所涉及的Windows 设备3.1 Window s NT 中的NT 设备和Win32设备Windows N T 对象名字空间提供一种伞形结构,在其下是个对象的自包含的集,叫做对象域,并允许对象名字空间被扩充[1]。

I/O 管理器是一个二级对象管理程序,管理着一个由磁盘文件、目录、设备组成的对象域。

I/O 管理程序创建名字为\Device 的对象目录,来包含代表I/O 设备的各对象的名字。

在用函数IoCreateDevice 创建Device 对象时,指定的名称是设备对Windows N T Executive 知道的名字。

如果・102・第8期 刘立辉等:基于TDI 的网络虚拟磁盘驱动研究与实现要使设备对Win32子系统和DOS 虚拟机可用,还必须给设备一个DOS 名称。

在MS -DOS 中,用户使用A :、C :、D :等等来指定软盘和硬盘驱动器,Win32子系统通过把全部驱动器字母放入对象管理程序名字空间作为全程数据来保护驱动器字母。

为此,创建一个特别的对象目录(如图5所示[1])。

图5 Win32设备对象目录N T 设备名和Win32设备名位于对象管理器的名字空间的不同部分。

N T 设备名在树的\Device 下面。

而Win32名则出现在\DosDevices 下面。

同一Device 对象的N T 设备名和DOS 设备名通过符号连接相联系。

相关主题