当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 技术文档:解读.Net虚拟框架的实现原理

ASP.NET
asp.net css注释的影响
ASP.NET与数据库相关技巧
关于HtmlForm控件
三色交替的下拉列表框
精通ASP.NET中弹出窗口技术
ASP.NET Forums与现有系统整合方案示例
ASP.NET操作IIS中的虚拟目录
DataGrid与SQL Server 2000数据绑定
如何让Web应用程序在Client端实现导出报表功能
如何保证web app中的Send Email线程稳定性
关于用ASP.Net识别远程主机服务器种类
ASP.NET中上传下载文件
提高ASP.NET性能的方法
asp.net StreamReader 创建文件
asp.net如何生成图片验证码(简单)
一个.net 压缩位图至JPEG的代码
简单的SQL Server数据库数据读取与数据操作
获取网站的RSS聚合到自己的网页
.Net程序中整站通用的防SQL注入函数
asp.net生成缩略图及给原始图加水印的函数

ASP.NET 中的 技术文档:解读.Net虚拟框架的实现原理


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 88 ::
收藏到网摘: n/a

在让.Net 程序脱离.net framework框架运行(源代码实现说明) 中我们介绍的脱离框架运行的方法,仍然需要依赖rsdeploy.dll才行。今回我们就介绍这个dll的实现原理。

简单的实现方式:首先我们需要用到一个undocumented features,在dll被加载时,设置环境变量 COMPLUS_InstallRoot 为当前dll所在目录。

另外复制c:\windows\microsoft.net\framework\v1.14322或者v2.0.50727到dll所在目录。把mscoree.dll 以及crt运行库放到dll目录中。在dll目录中创建一个本地的GAC目录,再把需要的GAC assemblies复制进去。

这样子就OK了,简单的.Net程序就可以在这个环境中运行了。如果是复杂的程序还需要实现一个虚拟注册表系统。对于我们虚拟框架这个应用来说,只需要实现一个只读的虚拟注册表就OK了。

这个实现可以ring0 也可以ring3,考虑到兼容性直接用ring3实现好了。

实现方式可以使用api hook的方式,即在我们的dll加载时hook advapi32.dll 中所有Reg开头的函数。虚拟注册表系统的框架就完成了,剩下的就是实现了。

这段时间忙着做DNGuard的官方网站http://www.dnguard.net/ ,英文的基本完工了,中文的还没做,现在还得开发一个网站的客户中心。等网站的事结了,就发布DNGuard hvm的专业版。在之后看看时间上的安排,有空的话会考虑自己实现一下这个虚拟框架,做一个小工具出来。

这个虚拟框架最核心的就是设置环境变量COMPLUS_InstallRoot 。

虚拟注册表系统只是一个扩展。我们还可以再扩展一下,增加一个虚拟文件系统。这样就可以做成像 xenocode vas 那样了。把整个程序部署成单一文件。作者:上帝