虚拟磁盘的设计与操作 ——李季季摘要:通常情况下是在磁盘上建立文件系统即硬盘分区,文件系统驱动程序(FSD)已经实现了在硬盘上创建和管理文件,本系统主要实现将一个文件虚拟成一个相应的磁盘,在文件系统驱动程序的基础之上,实现基于虚拟设备的文件系统,这种虚拟技术得到了很多应用,例如虚拟光驱就是其中之一,我们将对磁盘进行相关的操作。关键字: 函数 加载模块 读写操作 卸载模块 格式化 一.整体功能概述: 1. 通过命令行输入/mount 的加载相应虚拟磁盘的命令,执行完毕后便可以在“我的电脑”中看到又多出了与命令行输入相应的盘符,通过 format 将磁盘格式化或通过右键选择格式化成相应格式后,便可以对它操作。2. 通过命令行输入/mount 的加载相应虚拟磁盘的命令,执行完后便可以在“我的电脑”中看到又多出了一个虚拟的磁盘,便可以对它执行读写操作。3. 在命令行下输入/umount 的卸载相应虚拟磁盘的命令,执行完后便可以卸载除刚才加载的虚拟磁盘。二.设计的描述: 通常情况下是在磁盘上建立文件系统即硬盘分区,文件系统驱动程序(FSD)已经实现了在硬盘上创建和管理文件,本系统主要实现将一个文件虚拟成一个相应的磁盘,在文件系统驱动程序的基础之上,实现基于虚拟设备的文件系统,这种虚拟技术得到了很多应用,例如虚拟光驱就是其中之一。虚拟磁盘文件系统经过安装可以模拟真实的硬盘,支持各种文件系统功能。三.基本的数据结构(1)全局变量 dir_handleHANDLE dir_handle;该全局变量用于指向一个“目录对象”,存放本驱动程序创建的所有的磁盘对象。(2)模拟磁盘文件信息结构 OPEN_FILE_INFORMATIONtypedef struct _OPEN_FILE_INFORMATION{DEVICE_TYPE DeviceType;//所模拟的磁盘的类型BOOLEAN ReadOnly;//是否设置虚拟磁盘为只读LARGE_INTEGER FileSize;//本文件的大小USHORT FileNameLength;//文件名的长度UCHAR FileName[1];//文件名字符串}OPEN_FILE_INFORMATION;该结构保存了用于虚拟磁盘的文件的详细信息。在应用程序利用 mount 命令制定这个文件时,会将文件的信息组成这样一个结构后作为参数传入内核。驱动程序会抽取这些信息,并把它们作为虚拟磁盘的磁盘信息,例如磁盘的大小好只读属性。(3)设备扩展结构 DEVICE_EXTENSION:自定义的磁盘信息结构,用来保存设备的细节以及对设备的编程方式。Typedef struct _DEVICE_EXTESION{ BOOLEAN media_in_device; HANDLE file_han...