前面两篇闲聊Windows注册表-基础 和 闲聊Windows注册表-工具 讲了一些注册表方面的基本知识和相关工具,这些基本是停留在使用层面上的,今天讲一点稍微深入的,可能需要有一点儿编程经验。用过注册表编辑的同学都会发现添加值时,注册表工具都会有一个右键菜单让你选择键值类型,如下图:

新建键和值
其中新建项其实就相当于在当前键下新建一个键,相当于文件系统的新建目录,新建值就有多种选项,最常规的就是上图中列出的:字符串、二进制值、DWORD整型值、QWORD整型值、多字符串、可扩充字符串。其中DWORD是指4字节的整型值,QWORD是指8字节的整型值,字符串有三种,都是Unicode的字符串,其中”字符串“就是一般的字符串,”可扩充字符串“一般是指带有环境变量的字符串,”多字符串“是字符串数组,其每个字符串都是0结尾,最后以双0结尾;二进制值通常是指无法用上述几种分类的或者比较量大的数据,直接按字节码原生态的保存的类型;其实所有这些类型在注册表文件内部都是二进制的哈,只是外在解释不一样而已。来看看微软对这些类型是如何分类的:
//
//
// Predefined Value Types.
//
#define REG_NONE ( 0 ) // No value type
#define REG_SZ ( 1 ) // Unicode nul terminated string
#define REG_EXPAND_SZ ( 2 ) // Unicode nul terminated string
// (with environment variable references)
#define REG_BINARY ( 3 ) // Free form binary
#define REG_DWORD ( 4 ) // 32-bit number
#define REG_DWORD_LITTLE_ENDIAN ( 4 ) // 32-bit number (same as REG_DWORD)
#define REG_DWORD_BIG_ENDIAN ( 5 ) // 32-bit number
#define REG_LINK ( 6 ) // Symbolic Link (unicode)
#define REG_MULTI_SZ ( 7 ) // Multiple Unicode strings
#define REG_RESOURCE_LIST ( 8 ) // Resource list in the resource map
#define REG_FULL_RESOURCE_DESCRIPTOR ( 9 ) // Resource list in the hardware description
#define REG_RESOURCE_REQUIREMENTS_LIST ( 10 )
#define REG_QWORD ( 11 ) // 64-bit number
#define REG_QWORD_LITTLE_ENDIAN ( 11 ) // 64-bit number (same as REG_QWORD)
上面有不常见的REG_FULL_RESOURCE_DESCRIPTOR和REG_RESOURCE_REQUIREMENTS_LIST类型,通常是指计算机硬件资源信息的结构化数据,其实本质上还是二进制类型:

ResourceList类型
可能很多同学不知道,微软还搞了一些神秘的类型,比如下面这个:

高位为0xffff的类型
这种一般只有在硬件设备的Properties注册表下才能见到,而通常用户是无法打开看到这些值的,只有System权限的程序才能访问(如何使程序拥有System权限,可以参见我的文章使用chatGPT,以系统帐号运行进程,不想用程序的话也有一个工具NSudo*ex.e**能够用来访问)。
下回可以深扒一下这些特殊类型,有兴趣的同学点个赞哟!