虚拟磁盘的设计与操作
创建虚拟磁盘教学设计

创建虚拟磁盘教学设计虚拟磁盘(Virtual Disk)是一种虚拟化技术,用于将物理磁盘或存储设备模拟为逻辑磁盘,并在其上创建、管理和存储数据。
在教学中,我们可以利用虚拟磁盘来帮助学生理解磁盘管理的概念、操作系统对存储设备的抽象以及数据存储和管理的方法。
以下是一个基于虚拟磁盘的教学设计,以帮助学生理解和学习相关知识。
目标:1. 理解磁盘的基本概念和工作原理;2. 理解操作系统对磁盘的抽象和管理方式;3. 掌握虚拟磁盘的创建、挂载和卸载方法;4. 掌握在虚拟磁盘上创建、删除和管理文件的方法;5. 理解虚拟磁盘的优势和应用场景。
教学内容:1. 磁盘基础知识介绍(30分钟)- 介绍磁盘的定义、分类、组成和工作原理;- 分析磁盘的逻辑结构和物理结构;- 介绍磁盘容量、字节和扇区的关系。
2. 操作系统磁盘管理介绍(30分钟)- 讲解操作系统对磁盘的抽象和管理方式;- 介绍磁盘分区、格式化和文件系统的概念;- 分析操作系统的磁盘调度算法和数据缓存机制。
3. 虚拟磁盘介绍及创建方法(60分钟)- 介绍虚拟磁盘的定义、优势和应用场景;- 分析虚拟磁盘的逻辑结构和文件系统;- 讲解虚拟磁盘的创建、挂载和卸载方法;- 演示使用命令行和图形界面工具创建虚拟磁盘。
4. 虚拟磁盘上文件的操作(60分钟)- 演示在虚拟磁盘上创建、删除和管理文件的方法;- 介绍查看虚拟磁盘上文件信息的命令和工具;- 讲解虚拟磁盘上文件的读写操作和权限管理。
5. 虚拟磁盘的应用讨论(30分钟)- 分组讨论虚拟磁盘的应用场景和优势;- 要求学生在小组中提出并讲解一个具体应用案例;- 讨论案例的可行性、优缺点以及改进方向。
教学方法:1. 讲授教学:通过课堂讲授介绍磁盘基础知识、操作系统磁盘管理以及虚拟磁盘的创建方法;2. 演示教学:通过演示实际操作,展示虚拟磁盘的创建、挂载和卸载方法,以及文件的操作和管理;3. 实践练习:提供实践练习环节,让学生实际操作虚拟磁盘并完成相关任务,提升实际操作能力;4. 小组讨论:通过小组讨论,让学生思考虚拟磁盘的应用场景,培养学生的创新思维和问题解决能力。
操作系统-存储管理(4)段页式虚拟存储

操作系统-存储管理(4)段页式虚拟存储物理地址:⼜称绝对地址,即程序执⾏所使⽤的地址空间(处理器执⾏指令时按照物理地址进⾏)逻辑地址:⼜称相对地址,即⽤户编程所使⽤的地址空间,从0开始编号,有两种形式:⼀维逻辑地址(地址)⼆维逻辑地址(段号:段内地址)主存储器空间的分配与去配:分配:进程装⼊主存时,存储管理软件进⾏具体的主存分配操作,并设置⼀个表格记录主存空间的分配情况去配:当某个进程撤离或主动归还主存资源时,存储管理软件要收回它所占⽤的全部或者部分存储空间,调整主存分配表信息主存储器空间的共享:多个进程共享主存储器资源:多道程序设计技术使若⼲个程序同时进⼊主存储器,各⾃占⽤⼀定数量的存储空间,共同使⽤⼀个主存储器多个进程共享主存储器的某些区域:若⼲个协作进程有共同的主存程序块或者主存数据块多道程序设计需要复⽤主存:按照分区复⽤:主存划分为多个固定/可变尺⼨的分区,⼀个程序/程序段占⽤⼀个分区按照页架复⽤:主存划分成多个固定⼤⼩的页架,⼀个程序/程序段占⽤多个页架装载程序/加载器(loader)把可执⾏程序装⼊内存的⽅式有:绝对装载可重定位装载动态运⾏时装载地址转换:⼜称重定位,即把可执⾏程序逻辑地址转换成绝对地址,可分为:静态地址重定位:由装载程序实现装载代码模块的加载和地址转换(⽆需硬件⽀持),把它装⼊分配给进程的内存指定区域,其中所有指令代码和数据的逻辑地址在执⾏前⼀次全部修改为内存物理地址。
早期单任务单⽤户OS使⽤。
动态地址重地位:由装载程序实现装载代码模块的加载,把它装⼊进程的内存在指定区域,但对链接程序处理过的应⽤程序逻辑地址不做修改,程序内存起始地址被置⼊重定位寄存器(基址寄存器)。
程序执⾏过程中每当CPU访问程序和数据引⽤内存地址时,由硬件地址转换机构截取此逻辑地址并加上重定位寄存器的值。
运⾏时链接地址重定位存储保护:为避免主存中的多个进程相互⼲扰,必须对主存中的程序和数据进⾏保护。
虚拟硬盘

网络磁盘
虚拟硬盘“网络虚拟硬盘”即由网络服务商划分出一定的网络空间虚拟成一张“磁盘”,这样用户可以在互 联网上实现文件的备份与转移,当然你也可以通过客户端软件将这个网络硬盘虚拟成一个本地目录,并完全集成 到Windows的资源管理器中,让你使用起来就像使用本地硬盘一样方便,还可以在MS-DOS方式中对该目录进 行管理和操作。有了网络虚拟硬盘,你可以随时随地进行个人文件的上传、下载、删除及文件目录的新建、修改、 删除等操作。可以实现文件网络共享、网络文件快递、快速下载通道等。也就是说,只要你愿意,你可以与网络 上的所有人共享存放在网络硬盘上的文件。当然,你不愿意,谁也看不到你的文件。特别是在你下载网上软件时, 直接将下载文件的链接拖至网络硬盘图标中即可断线了,因为它的下载过程是直接在两台服务器中间进行传输, 与你的PC无关,你只要下达指令,别的就不用管它了,所以可以想象它的好处。另外,在现有的网络硬盘功能上, 服务商还拓展出了许多丰富多彩的服务,比如网络相册等等。
邻接权包含表演者权、广播组织权、录音录像制作者权、版式设计者权。
法律依据
1.《中华人民共和国著作权法》(2020修正),发布部门:全国人大常委会,内容:第四章、第五章规定了 邻接权的内容及保护。
2.《中华人民共和国著作权法实施条例》(2013修订),发布部门:国务院,内容:为实施《著作权法》的 具体规定。
(2)权利性质有联系。邻接权与狭义著作权的性质均为专有权利,并且邻接权人享有的许多权利与狭义著作 权人享有的一些专有权利的名称相同、行为性质也相同。
(3)法律规定有联系。对于一些适用于狭义著作权的法律规定同样适用于邻接权的保护,例如权利的限制制 度。
2.区别
(1)权利产生的原因不同。狭义著作权的产生是基于作品的创作,而邻接权的产生一方面是基于对作品的传 播,另一方面,基于对一些尚未达到独创性要求但具有保护价值的客体提供保护。
虚拟磁盘的设计与操作

虚拟磁盘的设计与操作——李季季摘要:通常情况下是在磁盘上建立文件系统即硬盘分区,文件系统驱动程序(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;该结构保存了用于虚拟磁盘的文件的详细信息。
创建虚拟磁盘基本步骤

创建虚拟磁盘基本步骤创建虚拟磁盘基本步骤一、创建设置虚拟硬盘步骤1:开始创建一个虚拟硬盘这是第一次使用,所以要创建一个虚拟硬盘:点击“操作”菜单→添加(A)→点击“下一步”。
步骤2:确定虚拟硬盘容量默认的大小是32M。
根据你的内存大小以及你的用途,你可以自己分配。
若是512内存(初选80M),最多100M。
1G的可以200-300M。
2G的若你同样不玩大型游戏可以划拨512以上。
这只是个人建议,还是看你需要用虚拟磁盘来做什么,这个后面会讲到,→点击“下一步”。
步骤3:“移除或恢复时清空内存”选项这里不要选中这个“移除或恢复时清空内存”选框,选中则表示当我们移除虚拟磁盘时会清空其所用文件,但我们等会儿要往里面装入一些东西。
→点击“下一步”。
步骤4:选择盘符这里为创建的虚拟磁盘选择盘符,随便(按系统分配的K)。
→点击“下一步”。
步骤5:选择磁盘的格式这里选择磁盘的格式,一般选择ntfs或fat32,选NTFS。
这里先不要选中第一个复选框“创建系统临时文件目录\Temp”,后面会说道更有效的做法;第二个“压缩文件系统”只针对NTFS,也不选,压缩系统的不常用文件用的。
→点击“下一步”。
步骤6:“系统关机时保存”选项“系统关机时保存”这里不选似乎更好,个人认为。
若选择,在不手动移除虚拟磁盘的情况下,会延长开关机的时间,而且是大大的延迟。
后面会说到怎样手动保存磁盘内容。
若你愿意其自动保存并能容忍这么长的开关机时间,也行。
→点击“下一步”。
步骤7:“设置项”选项点击“完成”,这样我们就拥有了第一个虚拟硬盘,但默认的虚拟硬盘的镜像文件会放在C盘,长期的载入与移除就起不到减少C盘磁盘碎片的的效果。
我们来设置一下。
打开软件的主界面(会看见刚才创建的虚拟磁盘):1,选中刚才创建的虚拟磁盘编号;2,点击“操作”菜单;3,选择“属性”选项卡→设置项;4,这个是我们之前为其选择的盘符,这里也可再次修改;5,这里就选择虚拟磁盘的镜像保存到哪里,不是C盘就行(初选C盘)。
图解“虚拟硬盘”永不磨损的高速硬盘Ramdisk

“虚拟硬盘”让IE浏览再提速有没有发觉打开一个网站的同时计算机在疯狂读盘呢,有没有发觉硬盘的速度已制约了你的浏览速度……随着宽带的普及,上网浏览的速度已越来越快,已不是像过去那样打开一个页面要等上半天。
而与此同时,网站也越做越大,越做越豪华。
有没有发觉打开一个网站的同时计算机在疯狂读盘呢,有没有发觉硬盘的速度已制约了你的浏览速度。
那如何提速呢,换更快的硬盘,不,我们来玩“虚拟硬盘”,用内存来模拟硬盘,大家知道,内存的速度不知比硬盘快多少倍,让我们来看看这块超级“硬盘”的威力吧。
隆重向大家介绍我们的“英雄”RamDiskXP(下载地址:/soft/116/116424.html)提供RamDiskXP V1.8.200 FOR Windows 2K/XP 的注册码Email:wswdddy@Code:6B403D051CEBDFFDA7846A6C1E243118BE938AE5D8CE241EEmail:ttdown@Code:68472E0E0FE1E6C9A08F6D6E5E693D1AE1918AE1DBCE271C72一、提速原理揭秘首先来介绍一下浏览过程吧1. 我们的计算机向网站服务器发出请求2. 网站服务器响应我们的请求,并把文件发给我们的计算机,这些文件包括html文件,图片文件等。
3. 我们的计算机把这些文件存在硬盘中的Temporary Internet Files文件夹中,注意这步是我们提速的关键,由于这些文件是琐碎的,硬盘要花很长的时间来处理。
4. 然后我们的浏览器读取这些文件,并把它们显示在屏幕上。
大家注意到了硬盘的速度对3,4 步的完成有至关重要的作用。
RamDiskXp将在内存中模拟一个硬盘,我们只要把Temporary Internet Files文件夹移至这个虚拟的硬盘即可。
是不是很简单。
二、提速过程手把手1. 首先当然是下载安装软件了,这里就不罗嗦了,要提醒的是Win98的用户也有相应的版本,可以去/product_ramdisk.cfm下载。
虚拟存储器的实现方法

虚拟存储器的实现方法
虚拟存储器是操作系统中的一个重要概念,用于扩展计算机的物理内存。
虚拟存储器的实现方法可以基于以下几种技术:
1. 分页机制:将物理内存和虚拟内存划分为固定大小的页,并将虚拟内存中的页面映射到物理内存中的页。
通过页面替换算法(如最近最久未使用算法)将虚拟内存中的页面从磁盘中加载到物理内存中的空闲页面,从而实现虚拟内存的扩展。
2. 分段机制:将程序按照逻辑结构划分为不同的段,每个段有不同的长度,可以动态地加载到物理内存中。
通过段表将虚拟内存中的段映射到物理内存中的段,并根据需要进行加载和替换。
3. 页面置换算法:虚拟存储器在物理内存空间不足时,需要选择一些页面置换出物理内存,从而将新的页面加载进来。
常见的页面置换算法包括FIFO(先进先出)、LRU(最近最久未
使用)、LFU(最不经常使用)等。
4. 页面回写机制:当页面被替换出物理内存时,如果其中的数据已被修改,需要将数据回写到磁盘中,以保持数据的一致性。
5. 页面预调度机制:根据程序运行的局部性原理,预测将来可能访问的页面,并提前将这些页面加载到物理内存中,减少缺页异常的发生。
需要注意的是,虚拟存储器的实现方法是操作系统的核心功能
之一,具体的实现方式会受到硬件架构、操作系统设计等多个因素的影响。
不同的操作系统可能会采用不同的实现方法来满足自身的需求。
KVM设计方案

KVM设计方案KVM是用于实现虚拟化的一种方法。
虚拟化是将一个物理计算机划分成多个虚拟计算机。
每个虚拟计算机可以运行不同的操作系统和应用程序。
KVM是基于Linux内核的虚拟化技术。
它使用硬件虚拟化扩展来提高虚拟机性能。
KVM包括两个主要组件:KVM内核模块和QEMU用户模式程序。
以下是一个KVM设计方案的概述:硬件要求KVM要求基于Intel VT或AMD-V硬件虚拟化扩展的处理器。
主机应该有足够的内存和硬盘空间以支持虚拟化环境。
网络和存储硬件应该能够满足虚拟机的需求。
操作系统要求主机应该运行一个Linux发行版,例如Ubuntu、Debian、Fedora或CentOS。
建议使用最新版的内核,以获得最佳的性能和功能。
安装KVMKVM内核模块和QEMU用户模式程序需要安装。
许多Linux发行版都包括KVM软件包,并且可以在包管理器中轻松安装。
以下是在Ubuntu上安装KVM的步骤:1. 打开终端并运行以下命令来安装KVM软件包:sudo apt-get install qemu-kvm2. 添加用户到KVM组:sudo adduser username kvm3. 重新登录用户会话,使组修正生效。
创建虚拟机KVM支持多种虚拟机格式,包括RAW、qcow2、VMDK和VHD。
以下是使用qcow2格式创建虚拟机的步骤:1. 创建一个虚拟磁盘镜像:qemu-img create -f qcow2 vm1.qcow2 10G这将创建一个名为vm1.qcow2的10 GB虚拟硬盘。
2. 启动虚拟机安装程序:virt-install --name=vm1 --ram=1024 --vcpus=1 --diskpath=/path/to/vm1.qcow2 --cdrom /path/to/iso/file此命令将启动一个名为vm1的虚拟机,具有1 GB RAM和1个CPU核心。
虚拟机的磁盘使用先前创建的vm1.qcow2文件,安装程序使用以ISO文件的形式提供的操作系统镜像。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
虚拟磁盘的设计与操作——李季季摘要:通常情况下是在磁盘上建立文件系统即硬盘分区,文件系统驱动程序(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_handle;//文件句柄ANSI_STRING file_name;//文件名LARGE_INTEGER file_size;//文件的大小BOOLEAN read_only;//只读属性PSECURITY_CLIENT_CONTEXT security_client_context;LIST_ENTRY list_head;KSPIN_LOCK list_lock;KEVENT request_event;PVOID thread_pointer;BOOLEAN terminate_thread;}DEVICE_EXTENSION,*PDEVICE_EXTENSION;本驱动程序所创建的虚拟对象均为自己维护这样一个数据结构。
实际上,所有内核驱动程序中的设备对象都维护这样一个数据结构。
其主要作用就是在此保存对应设备的一些参数,使得所有有关此设备的处理都可以通过设备对象访问到这些信息。
相关函数介绍(1)入口函数 DirverEntryDirverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegisterPath)该函数主要实现建立相应个数的磁盘对象和向I/O管理器注册4个分发例程以处理来自应用程序的相应请求。
(2)分发例程 FileDiskCreateCloseFileDiskCreateClose(IN PDEVICE_OBJECT DriverObject,IN PIRP Irp)在这个函数中相应打开文件和关闭文件对象的请求,对应主功能代码IRP_MJ_CREATE和IPR_MJ_CLOSE。
在函数中就是简单的返回打开成功的标记,不需要完成额外的工作。
(3)分发例程FileDiskReadWriteFileDiskReadWrite(IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp)这个函数完成对虚拟磁盘的读写,对应于主功能代码IRP_MJ_WRITE和IRP_MJ_READ。
在进行读写之前先确认设备是否存在。
(4)分发例程FileDiskDeviceControlFileDiskDeviceControl(IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp)该函数处理发送到虚拟磁盘的控制信息。
(5)分发例程FileDiskUnloadFileDiskUnload(IN PDRIVER_OBJECT Driverobject)用于卸载驱动程序。
通过调用辅助函数FileDiskDeleteDevice卸载本驱动程序创建的各设备对象和对应的设备对象工作线程。
(6)辅助函数辅助函数有FileDiskCreateDevice、FileDiskThread、FileDiskDeleteDevice、FileDiskOpenFile和FileDiskCloseFile这些辅助函数被前面的各个函数调用,以完成相对应的任务,其中最后两个函数在FileDiskThread中进行调用,完成相对应的工作。
程序主要模块代码1.虚拟磁盘或光驱的加载模块Int FileDiskMount(Int DeviceNumber,//设备号 0 1 2 3等POPEN_FILE_INFORMATION OpenFileInformation,//文件类型信息Char Driverletter,//卷名BOOLEAN CdImage//是否为CD){char VolumeName[]=”\\\\.\\ :”;char DeviceName[255];//临时存放文件名HANDLE Device;//文件句柄DWORD BytesReturned;//缓冲区VolumeName[4] = DriveLetter; //将空格用盘符号代替Device = CreateFile(VolumeName, //要打开的文件的名字GENERIC_READ | GENERIC_WRITE, // 访问模式FILE_SHARE_READ | FILE_SHARE_WRITE, //允许对文件进行读写共享访问NULL,OPEN_EXISTING, //文件必须已经存在。
//打开一个文件, 如果文件不存在函数将会失败FILE_FLAG_NO_BUFFERING, //禁止对文件进行缓冲处理。
文件只能写入磁盘卷的扇区块NULL);if (Device != INVALID_HANDLE_VALUE) //创建文件成功{SetLastError(ERROR_BUSY);PrintLastError(&VolumeName[4]);return -1;}//上面CreateFile的作用是:判断文件是否已经存在,存在则设置错误信息,中断返回。
不存在继续向下执行;if (CdImage){sprintf(DeviceName, DEVICE_NAME_PREFIX "Cd" "%u", DeviceNumber);//格式化输出到DeviceName中\Device\FileDisk Cd*}else{sprintf(DeviceName, DEVICE_NAME_PREFIX "%u", DeviceNumber);//格式化输出到DeviceName中\Device\FileDisk*}if (!DefineDosDevice( //创建一个指向设备命名空间的符号链接,创建失败,输出错误信息;DDD_RAW_TARGET_PATH,&VolumeName[4], //盘符号,例如Z:DeviceName)){PrintLastError(&VolumeName[4]);return -1; //返回}Device = CreateFile( //用CreateFile打开上面建立的符号链接VolumeName,GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_EXISTING, //打开一个文件, 如果文件不存在函数将会失败,利用DefineDosDevice创建VolumeName[4]与DeviceName的链接故文件存在;FILE_FLAG_NO_BUFFERING,NULL);if (Device == INVALID_HANDLE_VALUE) //创建失败;{PrintLastError(&VolumeName[4]); //错误信息;DefineDosDevice(DDD_REMOVE_DEFINITION, &VolumeName[4], NULL); //删除前面建立的符号链接return -1; //返回}if (!DeviceIoControl(Device,IOCTL_FILE_DISK_OPEN_FILE,OpenFileInformation,sizeof(OPEN_FILE_INFORMATION) + OpenFileInformation->FileNameLength - 1,NULL,0,&BytesReturned,NULL)) //创建失败{PrintLastError("FileDisk:"); //错误处理DefineDosDevice(DDD_REMOVE_DEFINITION, &VolumeName[4], NULL); ////删除前面建立的符号链接return -1; //返回}return 0;}2.虚拟磁盘或光驱的卸载模块int FileDiskUmount(char DriveLetter){char VolumeName[] = "\\\\.\\ :"; // "\\.\ :"特别特别注意中间有个空格HANDLE Device;DWORD BytesReturned;VolumeName[4] = DriveLetter; //将空格用盘符号代替Device = CreateFile( //此处的作用是判断文件是否存在VolumeName,GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_EXISTING, //文件必须已经存在。