第四章 管理机制
好久没有更新这个读书笔记了。不是因为不想看了,而是因为这段时间比较忙,另一方面因为第三章的内容确实晦涩难懂。花了很长时间看第三章的内容,还是收获很少,没法写读书笔记,甚而至于开始怀疑这本书的易读性。如果再坚持下去啃第三章,恐怕要失去信心,彻底放弃了。所以跳过了第三章,开始读第四章。
本章讲述了三种基本的管理机制:注册表、服务和Windows管理规范。
注册表
注册表是配置信息的存储仓库。但也是Windows内核和执行体所维护的内存数据结构的一个窗口。(以前使用Linux操作系统时,它的文件系统中有一个好像是叫proc的目录,这个目录下存放的文件,其内容是Linux内核中运行时变量值的快照。即查看这些文件的内容,即可知道一些特定内核变量的值。修改这些文件的内容,也就实时修改了内核变量的值。由此看来,Windows注册表也实现了类似的特性。)
查看和修改注册表
大部分注册表的设置都有一个对应的用户界面工具来完成。但有些高级设置必须直接修改注册表。Windows XP下修改注册表的工具是Regedit.exe。
注册表用法
注册表的读取,一般为三个时间点:
l 引导过程
l 登录过程
l 应用程序启动过程
当然在其他时间点上也可以读取注册表,典型的情况是应用程序响应注册表修改请求。
注册表的修改:
l 系统安装过程,会创建初始注册表。
l 应用程序安装过程,创建一些默认配置。
l 驱动程序安装过程。
l 用户通过用户界面修改设置。
有些应用程序会使用轮询(poll,书中译为“查询”,不够确切。)的方式不停的查询注册表内容。(这是低效率的做法,)正确的做法是使用RegNotifyChangeKey函数监听注册表变化,该函数会使调用线程进入等待状态。
(然而令我不解的是,很多Windows系统进程,也会轮询注册表。使用Sysinternals的Process Monitor工具,即可看到很多系统进程不停的查询注册表的键值,这包括lsass.exe,explorer.exe等进程。)
(Process Monitor是Regmon.exe和Filemon.exe合并起来的一个工具。这本书中不会提到Process Monitor,因为它是Sysinternals后来发布的。)
注册表数据类型
注册表的键(key):是一个容器,可以包含其他的键(子键)和值。类似于磁盘的目录。
注册表的值(value):存储的是数据。类似于磁盘上的文件。
注册表值的数据类型
Value Type |
Description |
REG_NONE |
No value type. |
REG_SZ |
Fixed-length Unicode string. |
REG_EXPAND_SZ |
Variable-length Unicode string that can have embedded environment variables. |
REG_BINARY |
Arbitrary-length binary data. |
REG_DWORD |
32-bit number. |
REG_DWORD_LITTLE_ENDIAN |
32-bit number, with low byte first. This is equivalent to REG_DWORD. |
REG_DWORD_BIG_ENDIAN |
32-bit number, with high byte first. |
REG_LINK |
Unicode symbolic link. |
REG_MULTI_SZ |
Array of Unicode NULL-terminated strings. |
REG_RESOURCE_LIST |
Hardware resource description. |
REG_FULL_RESOURCE_DESCRIPTOR |
Hardware resource description. |
REG_RESOURCE_REQUIREMENTS_LIST |
Resource requirements. |
REG_QWORD |
64-bit number. |
REG_QWORD_LITTLE_ENDIAN |
64-bit number, with low byte first. This is equivalent to REG_QWORD. |
REG_QWORD_BIG_ENDIAN |
64-bit number, with high byte first. |
其中的REG_LINK类型可以让一个键指向另一个键或值。
注册表的逻辑结构
根键 |
缩写 |
说明 |
链接 |
HKEY_CURRENT_ USER |
HKCU |
指向当前登录用户的轮廓 |
HKEY_USERS下对应的子键 |
HKEY_USERS |
HKU |
包含了所有已加载用户轮廓的子键 |
不是链接 |
HKEY_CLASSES_ ROOT |
HKCR |
包含了文件关联和COM注册信息 |
HKLM/SOFTWARE/Classes |
HKEY_LOCAL_ MACHINE |
HKLM |
包含与系统有关的信息 |
不是链接 |
HKEY _CURRENT_ CONFIG |
HKCC |
当前硬件配置 |
HKLM/SYSTEM/CurrentControlSet/Hardware Profiles/ Current |
HKEY_PERFORMANCE_DATA |
HKPD |
性能计数器 |
不是链接 |
(HKEY_PERFORMANCE_DATA不能通过regedit.exe访问到,只能通过API访问。)