WIN32汇编语言教程:第15章 注册表和INI文件 · 15.1 注册表和INI文件简介

在一个操作系统中,无论是操作系统本身还是运行于其中的大部分应用程序,都需要使用某种方式保存配置信息。在DOS系统中,配置信息往往是软件的开发者根据自己的喜好用各种途径加以保存的,比如在磁盘上面写一个二进制的 .dat文件,或者写一个文本文件等,这些配置文件中数据的格式也是各不相同的。

到了Windows 3.x系统中,这种情况发生了变化,虽然软件的开发者还可以沿用这种自成体系的方法,但是系统也提供了一种标准的初始化文件格式(Initialization File)来保存配置信息。初始化文件是一种以INI为扩展名的文本文件,操作系统提供了一套专用的函数对INI文件进行操作。Windows 3.x不仅鼓励程序员使用INI文件,操作系统本身也使用INI文件来保存配置信息,比如Windows安装目录下的Win.ini文件中保存了桌面设置和与应用程序运行有关的信息;System.ini文件中保存了与硬件配置有关的信息,另外,Control.ini与Program.ini等文件也是很重要的配置文件。

INI文件在使用中存在诸多缺陷。由于INI文件是文本文件,使用任何文本编辑器都可以随意对它进行修改,所以安全性不是很好。另外,INI文件的结构比较简单,无法保存格式复杂的数据,如很长的二进制数据或带回车的字符串等。最主要的缺点还是单个INI文件的大小不能超过64 KB。如果不同的应用程序都将自己的配置信息保存于Win.ini或者System.ini中,那么这些文件的规模很快就会超过限制的长度。如果不同应用程序都使用自己的INI的话,那么集中管理又成了一个问题。

在Windows 9x和Windows NT系列操作系统中,改用了一种全新的方法来管理配置信息,那就是使用集中管理的注册表(Registry)。注册表并不像它的中文名称所称的那样是“表”,而是一种格式由系统定义的数据库,它存放于某些二进制文件中。不同操作系统中对应的文件名可能有所不同,比如Windows 9x系统中的注册表文件由位于Windows安装目录中的System.dat和User.dat两个文件组成,而NT系统的注册表往往由位于Windows安装目录下的System32\Config目录中的多个文件构成。操作系统将这些不同的文件集中“虚拟”成整个注册表供系统自身及应用程序使用。

相对于INI文件对于Windows 3.x系统的重要性,注册表对于Windows 9x和NT系统来说显得更加重要。因为绝大多数系统使用的配置信息都存放于此,如系统的硬件配置、安装的驱动程序列表、文件的关联信息、系统的网络配置和权限配置等,这些配置信息直接关系到Windows系统的启动和初始化过程。如果注册表受到了破坏,那么轻者Windows的启动过程出现异常,重者可能会使整个系统无法启动。另外,大部分应用程序的配置信息也存放于此,如果注册表受到了破坏,即使操作系统能正常启动,应用程序的运行也可能会受影响。

正是因为注册表结构的封闭性和重要性,我们无法再使用像编辑INI文件那样的简单方法来编辑注册表文件。实际上,Windows系统对注册表文件的保护很严格,当系统在运行的时候,注册表文件是被操作系统以独占方式打开的,其他应用程序即使是用最基本的读权限也无法打开它们,更不用说对它们进行写操作了。

要对注册表进行操作,必须使用系统提供的接口。Windows为此提供了一系列的注册表操作函数,应用程序可以通过它们来完成注册表编辑器(Regedit程序)能完成的全部功能,甚至包括远程操作注册表以及对 .reg文件进行导入和导出等操作。

为了提供向下兼容性,Windows 9x和NT系统在支持注册表操作的同时也支持INI文件的操作。实际上对于某些“Copy and play”的小程序来说,需要保存的配置信息并不复杂,使用INI文件可能更加简单实用,而且保存于注册表中的配置信息是无法随文件拷贝到其他计算机中的。如果某些应用程序希望拷贝程序的同时可以拷贝配置信息,那么最好还是使用INI文件,所以在Windows 9x和NT系统中,INI文件的使用还是相当广泛的。

本章用两个单独的程序例子,详细介绍INI文件和注册表的使用方法。

上页:第14章 异常处理 · 14.3 使用SEH处理异常(4) 下页:第15章 注册表和INI文件 · 15.2 INI文件的操作(1)

第15章 注册表和INI文件

版权所有 © 云南伯恩科技 证书:粤ICP备09170368号