深入解析Windows操作系统(Windows Internals) 4th Edition 读书笔记 - 第四章 管理机制 (一)

时间:2021-02-03 11:46:28

第四章 管理机制

 

好久没有更新这个读书笔记了。不是因为不想看了,而是因为这段时间比较忙,另一方面因为第三章的内容确实晦涩难懂。花了很长时间看第三章的内容,还是收获很少,没法写读书笔记,甚而至于开始怀疑这本书的易读性。如果再坚持下去啃第三章,恐怕要失去信心,彻底放弃了。所以跳过了第三章,开始读第四章。

 

本章讲述了三种基本的管理机制:注册表、服务和Windows管理规范。

 

注册表

注册表是配置信息的存储仓库。但也是Windows内核和执行体所维护的内存数据结构的一个窗口。(以前使用Linux操作系统时,它的文件系统中有一个好像是叫proc的目录,这个目录下存放的文件,其内容是Linux内核中运行时变量值的快照。即查看这些文件的内容,即可知道一些特定内核变量的值。修改这些文件的内容,也就实时修改了内核变量的值。由此看来,Windows注册表也实现了类似的特性。)

 

查看和修改注册表

大部分注册表的设置都有一个对应的用户界面工具来完成。但有些高级设置必须直接修改注册表。Windows XP下修改注册表的工具是Regedit.exe

 

注册表用法

注册表的读取,一般为三个时间点:

l         引导过程

l         登录过程

l         应用程序启动过程

当然在其他时间点上也可以读取注册表,典型的情况是应用程序响应注册表修改请求。

 

注册表的修改:

l         系统安装过程,会创建初始注册表。

l         应用程序安装过程,创建一些默认配置。

l         驱动程序安装过程。

l         用户通过用户界面修改设置。

 

有些应用程序会使用轮询(poll,书中译为“查询”,不够确切。)的方式不停的查询注册表内容。(这是低效率的做法,)正确的做法是使用RegNotifyChangeKey函数监听注册表变化,该函数会使调用线程进入等待状态。

 

(然而令我不解的是,很多Windows系统进程,也会轮询注册表。使用SysinternalsProcess Monitor工具,即可看到很多系统进程不停的查询注册表的键值,这包括lsass.exeexplorer.exe等进程。)

Process MonitorRegmon.exeFilemon.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访问。)