虚拟磁盘的设计与操作
- 格式:doc
- 大小:88.00 KB
- 文档页数:14
创建虚拟磁盘教学设计虚拟磁盘(Virtual Disk)是一种虚拟化技术,用于将物理磁盘或存储设备模拟为逻辑磁盘,并在其上创建、管理和存储数据。
在教学中,我们可以利用虚拟磁盘来帮助学生理解磁盘管理的概念、操作系统对存储设备的抽象以及数据存储和管理的方法。
以下是一个基于虚拟磁盘的教学设计,以帮助学生理解和学习相关知识。
目标:1. 理解磁盘的基本概念和工作原理;2. 理解操作系统对磁盘的抽象和管理方式;3. 掌握虚拟磁盘的创建、挂载和卸载方法;4. 掌握在虚拟磁盘上创建、删除和管理文件的方法;5. 理解虚拟磁盘的优势和应用场景。
教学内容:1. 磁盘基础知识介绍(30分钟)- 介绍磁盘的定义、分类、组成和工作原理;- 分析磁盘的逻辑结构和物理结构;- 介绍磁盘容量、字节和扇区的关系。
2. 操作系统磁盘管理介绍(30分钟)- 讲解操作系统对磁盘的抽象和管理方式;- 介绍磁盘分区、格式化和文件系统的概念;- 分析操作系统的磁盘调度算法和数据缓存机制。
3. 虚拟磁盘介绍及创建方法(60分钟)- 介绍虚拟磁盘的定义、优势和应用场景;- 分析虚拟磁盘的逻辑结构和文件系统;- 讲解虚拟磁盘的创建、挂载和卸载方法;- 演示使用命令行和图形界面工具创建虚拟磁盘。
4. 虚拟磁盘上文件的操作(60分钟)- 演示在虚拟磁盘上创建、删除和管理文件的方法;- 介绍查看虚拟磁盘上文件信息的命令和工具;- 讲解虚拟磁盘上文件的读写操作和权限管理。
5. 虚拟磁盘的应用讨论(30分钟)- 分组讨论虚拟磁盘的应用场景和优势;- 要求学生在小组中提出并讲解一个具体应用案例;- 讨论案例的可行性、优缺点以及改进方向。
教学方法:1. 讲授教学:通过课堂讲授介绍磁盘基础知识、操作系统磁盘管理以及虚拟磁盘的创建方法;2. 演示教学:通过演示实际操作,展示虚拟磁盘的创建、挂载和卸载方法,以及文件的操作和管理;3. 实践练习:提供实践练习环节,让学生实际操作虚拟磁盘并完成相关任务,提升实际操作能力;4. 小组讨论:通过小组讨论,让学生思考虚拟磁盘的应用场景,培养学生的创新思维和问题解决能力。
操作系统-存储管理(4)段页式虚拟存储物理地址:⼜称绝对地址,即程序执⾏所使⽤的地址空间(处理器执⾏指令时按照物理地址进⾏)逻辑地址:⼜称相对地址,即⽤户编程所使⽤的地址空间,从0开始编号,有两种形式:⼀维逻辑地址(地址)⼆维逻辑地址(段号:段内地址)主存储器空间的分配与去配:分配:进程装⼊主存时,存储管理软件进⾏具体的主存分配操作,并设置⼀个表格记录主存空间的分配情况去配:当某个进程撤离或主动归还主存资源时,存储管理软件要收回它所占⽤的全部或者部分存储空间,调整主存分配表信息主存储器空间的共享:多个进程共享主存储器资源:多道程序设计技术使若⼲个程序同时进⼊主存储器,各⾃占⽤⼀定数量的存储空间,共同使⽤⼀个主存储器多个进程共享主存储器的某些区域:若⼲个协作进程有共同的主存程序块或者主存数据块多道程序设计需要复⽤主存:按照分区复⽤:主存划分为多个固定/可变尺⼨的分区,⼀个程序/程序段占⽤⼀个分区按照页架复⽤:主存划分成多个固定⼤⼩的页架,⼀个程序/程序段占⽤多个页架装载程序/加载器(loader)把可执⾏程序装⼊内存的⽅式有:绝对装载可重定位装载动态运⾏时装载地址转换:⼜称重定位,即把可执⾏程序逻辑地址转换成绝对地址,可分为:静态地址重定位:由装载程序实现装载代码模块的加载和地址转换(⽆需硬件⽀持),把它装⼊分配给进程的内存指定区域,其中所有指令代码和数据的逻辑地址在执⾏前⼀次全部修改为内存物理地址。
早期单任务单⽤户OS使⽤。
动态地址重地位:由装载程序实现装载代码模块的加载,把它装⼊进程的内存在指定区域,但对链接程序处理过的应⽤程序逻辑地址不做修改,程序内存起始地址被置⼊重定位寄存器(基址寄存器)。
程序执⾏过程中每当CPU访问程序和数据引⽤内存地址时,由硬件地址转换机构截取此逻辑地址并加上重定位寄存器的值。
运⾏时链接地址重定位存储保护:为避免主存中的多个进程相互⼲扰,必须对主存中的程序和数据进⾏保护。
虚拟磁盘的设计与操作——李季季摘要:通常情况下是在磁盘上建立文件系统即硬盘分区,文件系统驱动程序(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盘)。
“虚拟硬盘”让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是基于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文件的形式提供的操作系统镜像。
虚拟磁带库备份系统项目技术规范书华能江苏分公司2018年6月虚拟磁带库备份系统项目技术规范书一、总则1、本规范书适用于华能江苏分公司虚拟磁带库备份系统项目,其内容包括该项目全部设备的功能、结构、性能设计、安装和调试等方面的技术要求。
2、本技术规范书提出的是最低限度的技术要求,并未对一切技术细节做出规定,也未充分引述有关标准和规范,承包单位除应完成本技术协议所规定工作量、质量满足本协议的标准、要求外,也需符合国家、行业有关标准、规范。
3、投标方所供材料必须符合招标方要求,并经招标方验收合格方可使用,对于进口设备应有原产地证明材料和海关报关单,如在使用过程中发现有虚假行为,必须免费进行更换,并承担相应的损失和后果。
4、投标方应遵循行业规范进行施工,满足但不限于下列标准:a)IEC 60950 信息技术设备的安全要求 (91)b)GB/T 8566 计算机软件开发规范c)GB/T 8567 计算机软件产品开发文件编制指南d)GB/T 9385 计算机软件需求说明编制指南e)GB/T 9386 计算机软件测试文件编制规范f)GB/T 12504 计算机软件质量保证计划规范g)GB/T 14394 计算机软件可靠性和可维护性管理h)GB/T 15853-1995 软件支持环境i)GB/T 17544-1998 信息技术软件包质量要求和测试j)DL/T5456-2012 《火力发电厂电厂信息系统设计技术规定》5、投标方对招标文件规范书的偏差(无论多少或微小)都清楚地表示在“差异表”中。
如投标方未对规范书提出书面异议,招标方则可认为投标方提供的产品完全满足规范书的要求。
6、除本招标文件另有说明外,投标方提供的所有设备均应按照相关国际标准、相关国家标准、相关行业标准和规范进行设计、制造、检验和安装。
所用的标准必须是最稳定版本,如果这些标准的内容有矛盾时,应按照最高标准的条款执行或按双方协商同意的标准或条款执行。
收稿日期: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 随着网络的普及,网络技术针对个人应用的比例越来越高,例如电子邮箱、个人主页空间、个人网络空间。
虚拟磁盘的设计与操作——李季季摘要:通常情况下是在磁盘上建立文件系统即硬盘分区,文件系统驱动程序(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, //文件必须已经存在。