欢迎光临 Enjoy IT (ITECN.NET) 登录 | 注册 | 帮助

深入理解Windows Vista内核三:内核事务管理

说在前面:Mark Russinovich共为《TechNet Magazine》写了三篇有关《深入了解Windows Vista内核》的系列文章,这是本系列中的最后一篇。尽管在微软网站上,前两篇文章有汉语的译文,但是有些地方似乎并不到位。乘第三篇英文原稿刚刚发布,盆盆抢先一步翻译,先让ITECN的读者朋友尝尝鲜,翻译得也不能说好,但是盆盆已经用心了。以下就是正文部分。

到目前为止,这个系列文章涵盖了Windows Vista内核的增强,包括进程、I/O、内存管理、系统启动、关机和电源管理。在第三、也是最后一个部分里,我们将讨论有关可靠性、恢复和安全方面的增强特性。

在这个系列文章中,并没有讲述有关用户帐户控制(UAC)的原理,UAC实际上由一系列不同的技术组成,包括为旧版应用程序而准备的文件系统和注册表虚拟重定向、访问管理特权的提升权限提示、还有Windows完整性级别(用于将高特权进程和同一帐户下运行的低特权进程隔离开)。还将会在《TechNet Magazine》上发表一篇有关UAC内部原理的文章,届时大家可以阅读。

Windows Vista提供许多最新特性和改进,帮助提升系统的稳定性,并且方便我们对系统和应用程序的问题进行排错。例如,Windows内核事件跟踪记录程序(ETW)会持续工作,以便把文件、注册表、中断和其他类型的活动事件记录到一个循环缓存中。如果出现问题,新的Windows诊断基础结构(WDI)特性就会从该循环缓存里捕获一个快照,并在本地进行分析,或者上传到微软的相关故障诊断站点。

新的可靠性和性能监视器可以帮助我们进行故障排错,例如系统崩溃或者挂起,还有对系统配置所进行的修改。如果要对无法启动的系统进行离线排错,我们现在可以使用强大的系统恢复工具(SRT),而不再需要借助故障恢复控制台。

有三大部分和系统内核级别的改变有关,所以应该深入了解一下文章里以下三大部分:内核事务管理器(KTM)、更好的故障处理,以及“以前的版本”特性。

盆盆评注:“以前的版本”特性,基于系统的卷影副本和系统还原的功能。可以方便地把文件或者目录恢复到先前所备份的版本。

内核事务管理器

对软件开发来说,其中一个最让人头痛的地方就是错误处理的条件判断。在以下情况中,显得尤其正确:例如在执行高级操作的过程中,应用程序已经完成了一个或者多个子任务,可能导致文件系统或者注册表的修改。举个例子,应用程序的软件更新服务可能会修改某些注册表键值、替换应用程序的其中一个可执行文件,但是当试图替换第二个可执行文件时拒绝访问。为了确保该应用程序的一致性,软件更新服务必须能够跟踪所有的修改,以便可以撤销这些修改。对错误恢复代码进行测试,是非常困难的,而且通常会忽略,所以恢复代码里的错误会抹杀其功效。

在内核事务管理器的帮助下,Windows Vista应用程序只需要付出很小的努力,就可以使用NTFS文件系统和注册表的最新事务支持特性,获得自动错误恢复的能力。当应用程序要进行大量相关修改时,它既可以创建DTC事务和KTM事务句柄,也可以直接创建KTM句柄,然后把文件和注册表键值的修改和该事务相关联。如果所有的修改能够顺利完成,应用程序就会递交该事务,这样修改就能最终生效,但是只要还没有达到这一点,应用程序都可以撤销该事务,从而丢弃所做的任何修改,以确保应用程序的一致性。

还有一个好处是,除非已经递交某个事务,否则其他应用程序无法看到该事务中所作的修改。在Windows Vista和今后发布的Windows Server Longhorn中,如果应用程序使用DTC,则可以把它们的事务和SQL Server、MSMQ等数据库进行交互协调。因此,使用KTM事务的更新服务可以确保应用程序始终处于一致的状态。这就是为什么Windows Update和系统还原使用KTM事务的原因。

作为事务支持的核心,KTM允许NTFS和注册表这样的事务资源管理器,与应用程序所做的一组特定修改之间进行协调。在Windows Vista中,NTFS使用一个称作TxF的扩展功能来支持事务。注册表则使用一个名为TxR的类似扩展功能。这些内核模式的资源管理器和KTM一起工作,以协调事务状态;就好像用户模式下的资源管理器使用DTC,在多个用户模式资源管理器之间协调事务状态。第三方也可以使用KTM来实现自己的事务资源管理器。

TxF和TxR都定义了一组新的文件系统和注册表API,和已有的API类似,只是增加了事务相关的参数。如果应用程序需要用事务来创建文件,则它首先需要使用KTM创建事务,然后把所得的事务句柄传递给新的文件创建API。

TxF和TxR都依赖于通用日志文件系统(CLFS)(%Sys­tem­Root%\System32\Clfs.sys)所提供的高速文件系统日志功能,CLFS最初是在Windows Server 2003 R2中引入的。使用CLFS,TxF和TxR就可以在递交事务之前,持续保存事务状态的改变。这样就可以提供事务恢复能力,甚至在掉电时也可以确保。除了CLFS日志,TxR还在%Systemroot%\System32\Config\Txr目录下创建一组相关日志文件,以跟踪系统注册表文件的事务改变,如图1所示,同时还为每个用户的注册表配置单元文件创建一组不同的日志文件。
在每个NTFS卷,TxF把事务数据存储在该NTFS卷下的\$Ex­tend\$RmMetadata目录下,该目录是隐藏的。

盆盆评注:\$Ex­tend\$RmMetadata目录是隐藏的,我们无法在Shell中直接查看,但是可以借助第三方工具进行查看,如图2所示。

已发表 2007年3月22日 13:01 作者 ahpeng

评论通知

如果您想在帖子更新时接到邮件通知,请先登录。这里

订阅帖子评论使用 RSS

评论

# re: 深入理解Windows Vista内核:内核事务管理

2007年3月22日 22:26 by aloki

能不能把原文的连接和前两篇的连接也贴出来,谢谢了

# re: 深入理解Windows Vista内核:内核事务管理

2007年3月22日 23:25 by ahpeng

To aloki:原文链接:

Part III

http://blogs.itecn.net/blogs/winternals/archive/2007/03/22/insidevistakernel2.aspx

前面两篇,推荐看英文原文,微软官网上的中文译文,翻译得还行,但是个别地方值得商榷。

Part II

http://www.microsoft.com/technet/technetmag/issues/2007/03/VistaKernel/default.aspx

Part I

http://www.microsoft.com/technet/technetmag/issues/2007/02/VistaKernel

# 深入理解Windows Vista内核三:内核事务管理

2007年3月29日 15:10 by 盆盆的博客

这是Mark Russinovich的《深入了解Windows Vista内核》的系列文章最后一篇,这部分的内容描述内核事务管理器。盆盆不但对其进行翻译,而且还加注了自己的见解,可以帮助您更好地理解Mark这篇文章的意义:

# re: 深入理解Windows Vista内核三:内核事务管理

2007年11月29日 20:18 by aman

你好,

\$Ex­tend\$RmMetadata目录是隐藏的,我们无法在Shell中直接查看,但是可以借助第三方工具进行查看。

您能告诉一下这个第三方工具是什么?

说说您的看法?

(必填) 
必填 
(必填)