Windows中的默默无闻大英雄----虚拟存储

简介:

本文只是提供一种思想,没有其他意图。不过这只是Windows兼容方案的一种措施,肯定还有很多措施。感兴趣的可以看看,把玩把玩。

听见别人说起“虚拟化”,还以为是Xen、VMware、Hyper-v等虚拟化软件提供的虚拟化技术。结果恰恰相反,今天听到的虚拟化却是Windows的文件虚拟化和注册表虚拟化技术(按照微软官方说明后面都使用“虚拟存储(VirtualStore)”所代替。虚拟存储也不能理解为虚拟磁盘(VHD,Virtual Hard Disk))。不过在这里与其说它们是一种技术还不如说是一种思路。

我认为这种思路的核心就是如何保持Windows系统的整洁性和规范性。先别急说什么是文件虚拟化或者什么是注册表虚拟化,先详细说说这种技术的由来比较好。

整洁性和规范性,这两个词用在这里都是我杜撰出来的,不过有没有效大家看看再做评论。所谓的完整性就是指如何保持Windows系统目录(%SystemRoot%)和关键目录如“%SystemRoot%\System32”、“%SystemRoot%\SysWoW64”等不受到其他应用程序的改变,如应用程序向%SystemRoot%写入(“写入”操作的结果当然有可能是“覆盖”)配置文件或者dll(动态链接库)文件等。规范性是指提醒程序开发人员,不要设计一些与Windows系统开发理念或方法相忤逆的程序来破坏系统降低系统的可用性和可维护性,如不要设计将上述文件写入那些关键目录中。Windows开发人员更希望应用程序也能实现多用户的特性,即同一台计算机中的不同的用户使用不同的配置文件而使得不同的用户不会影响其他用户的设置和数据,尽管现在大多数程序已经这样设计。从刚才的这句话也可以看出这个技术其实只不过是处理兼容性程序的一种方法。

那么这种方法到底是如何实现的呢?答案很有意思,是文件重定向。文件重定向其实说起来并不复杂,就像快捷方式或者PowerShell中的快捷命令一样,通过访问链接文件或目标文件的别名(alias)就能真正的使用目标文件或程序。

说这么多概念有什么用呢?倒也没什么用。现在最新的Windows7 Enterprise已经隐去了在资源管理器工具栏上的“兼容性文件”的按钮,这让它变得更加默默无闻起来。但如果用户细心依然能发现它的存在。它就在“C:\User\UserName\AppData\Local\VirtualStore\”文件夹下。该文件专门用于保存重定向内容的根文件夹。对于每一个被重定向的文件都在这个文件下的对应文件夹里找到。

这个文件夹下可以重定向的文件位置有:

%SystemRoot%

%SystemRoot%\System32\

%SystemRoot%\SysWoW64\

%SystemRoot%\Program Files\

%SystemRoot%\Program Files (X86)\

如同前面所说,这个技术只对部分兼容性程序起作用,因此同样也面临着问题。这种机制只能使用标准权限运行安装程序时才有用,对于使用管理员权限安装的程序没有用。

同样的注册表虚拟化也就好理解了!其重点保护的键是HKEY_LOCAL_MACHINE\Software。感兴趣的话可以到微软官方网站的TechNet Library查看相关技术文档。





本文转自 urey_pp 51CTO博客,原文链接:http://blog.51cto.com/dgd2010/1095203,如需转载请自行联系原作者

相关文章
|
4天前
|
安全 虚拟化 Windows
手把手教你如何在虚拟机上安装Windows 10
手把手教你如何在虚拟机上安装Windows 10
|
5月前
|
存储 NoSQL MongoDB
MongoDB【部署 04】Windows系统实现MongoDB多磁盘存储
MongoDB【部署 04】Windows系统实现MongoDB多磁盘存储
218 0
|
7月前
|
Shell 网络安全 网络虚拟化
[笔记]Windows使用OpenVpn构建虚拟局域网
[笔记]Windows使用OpenVpn构建虚拟局域网
291 0
|
存储 监控 数据可视化
在Windows下使用JMeter集群+Influxdb存储+Grafana实时数据展示
在Windows下使用JMeter集群+Influxdb存储+Grafana实时数据展示
314 0
在Windows下使用JMeter集群+Influxdb存储+Grafana实时数据展示
|
存储 编译器 Windows
(int char等)数据类型的存储方式及计算取值(最全、最详细~保姆式讲解)(Windows)
M表示 大于等于1,小于2的数。(解释一下,我们在10进制里面,使用科学计数法是用一个大于等于1、小于10的数乘以10^n来表示的。类比推理一下,在2进制里面就是一个大于1、小于2的数乘以2的多少次)。
162 0
(int char等)数据类型的存储方式及计算取值(最全、最详细~保姆式讲解)(Windows)
|
存储 jenkins Java
《Jenkins从零到壹》jenkins问题:windows环境安装,安装目录里没有存储数据(JAVA 小虚竹
《Jenkins从零到壹》jenkins问题:windows环境安装,安装目录里没有存储数据(JAVA 小虚竹
165 0
《Jenkins从零到壹》jenkins问题:windows环境安装,安装目录里没有存储数据(JAVA 小虚竹
|
存储 编解码 Ubuntu
FFMPEG音频视频开发:QT获取Android、Linux、Windows系统上的摄像头数据帧与声卡音频通过FFMPEG编码为MP4存储(v1.0)
FFMPEG音频视频开发:QT获取Android、Linux、Windows系统上的摄像头数据帧与声卡音频通过FFMPEG编码为MP4存储(v1.0)
494 0
FFMPEG音频视频开发:QT获取Android、Linux、Windows系统上的摄像头数据帧与声卡音频通过FFMPEG编码为MP4存储(v1.0)
|
Ubuntu 程序员 Windows
成功解决Windows和VM下的Ubuntu虚拟系统之间相互复制粘贴的问题
成功解决Windows和VM下的Ubuntu虚拟系统之间相互复制粘贴的问题
成功解决Windows和VM下的Ubuntu虚拟系统之间相互复制粘贴的问题
|
存储 Linux 对象存储
如何利用用云存储网关作为Windows docker存储访问OSS
本文像用户介绍在windows的容器环境中,如果利用阿里云云存储网关的smb共享作为后端存储,实现docker容器内的数据上云,在docker中直接访问对象存储OSS中的数据。
2635 0
如何利用用云存储网关作为Windows docker存储访问OSS
|
Windows Web App开发 API
UWP 判断windows mobile是使用的实体键还是虚拟按键
原文:UWP 判断windows mobile是使用的实体键还是虚拟按键 最近在写启动屏幕,发现虚拟按钮会挡住,启动屏幕的最下面的元素,大概有50 px。可是有什么办法知道手机是用的实体键还是虚拟按键吗? 如下图。
1126 0