Windows系统的很多组件都是可以配置的,其内核组件通常都支持一些参数,甚至有些组件完全依赖于系统的配置信息。包括I/O管理器和即插即用管理器在初始化阶段依据系统的配置设置来例举和加载设备驱动程序。windows操作系统提供了一个称为”注册表(registry)“的中心存储设施作为系统的配置和管理中心,应用程序和内核通过访问注册表来读写各种设置。windows同时也提供了一些API供应用程序访问注册表,这些API函数在接到注册表访问请求以后,将它们转发给内核的系统服务。在内核中,执行体包含一个成为”配置管理器(configuration manager)“的组件,它是注册表的真正实现。注册表是由一组成为储巢(hive)的文件构成的,每个储巢文件的内部都包含了一个树状层次结构。可以把储巢系统看成文件系统,类似目录和文件结构。因此配置管理器等同于一个文件系统的驱动程序。
windows注册表是一个树状结构,每个节点是一个键(Key)或值(value)。键是一个容器,好比文件系统中的目录,它可以包含其他的键(称为子键)和值。值存储的是数据,好比文件系统的文件。注册表的根是一个键,称为根键。注册表的结构和信息对于普通用户来说是隐藏的,必须通过注册表编辑工具(regedit.exe)等来访问,软件安装程序和应用程序则调用相应的API来读写注册表中的软件设置。
注册表的值可以有多种类型,绝大多数注册表值的类型为REG_DWORD(32位整数)、REG——BINARY(二进制数)和REG_SZ(字符串)。有一种特殊类型为符号链接REG_LINK,可以允许一个键或值指向另一个键或值。上面图中所示的注册表的顶级结构也是利用符号链接构造起来的。注册表顶级结构有8个根键,其中:HKEY_PERFORMANCE_<xxx>根键在regedit的工具中式不可见的,这些性能数据并非真正位于注册表的储巢中,它们反应了系统内存的状态信息,只不过windows为上层应用程序提供了通过注册表API来获得性能信息的便捷途径而已。
除了HKEY_PERFORMANCE_<xxx>以外,其他的5个根键,真正存放的是系统设置信息的子树HKLM和HKU。HKLM存放的是有关系统的全局信息,包括5个子健,分别为HARDWARE(硬件设置)、SAM(本地账户和组的信息)、SECURITY(系统全局范围的安全策略和用户权限设置)、SOFTWARE(系统中的全局配置信息,在系统引导时不需要)和SYSTEM(系统的全局配置信息,在系统引导时需要,包括设备驱动程序和系统服务等)。HKU为系统中的每个加载过的用户轮廓包含一个子健,也包含一个名为.DEFAULT的子健,这是系统的默认轮廓,当登陆进程winlogon.exe为第一次登陆到系统中的用户创建轮廓时,将以此为基础。
因此,HKLM存放的是针对当前整个系统的配置信息;而HKU一系统中的用户为基础存放各个用户的轮廓信息。HKLM和HKU中的结构不随当前登陆账户而发生变化,它们代表系统的全局视图;但其他三个根键,HKCU、HKCR和HKCC,则利用HKLM和HKU中的信息重构出一个特定于当前登陆用户和当前硬件环境的视图。这使得每个用户既可以有自己的独立配置设置,又能够共享系统的全局配置信息。操作系统和应用软件可以利用这种灵活性,将系统或者软件设置应用到整个系统中,或仅仅对当前用户起作用。