当前位置: 首页 > news >正文

《Windows Internals》10.1.6 HKEY_USERS:为什么它才是真正的“已加载用户配置大本营”?



🔥个人主页:杨利杰YJlio
❄️个人专栏:《Sysinternals实战教程》 《Windows PowerShell 实战》 《WINDOWS教程》 《IOS教程》
《微信助手》 《锤子助手》 《Python》 《Kali Linux》
《那些年未解决的Windows疑难杂症》
🌟让复杂的事情更简单,让重复的工作自动化


《Windows Internals》10.1.6 HKEY_USERS:为什么它才是真正的“已加载用户配置大本营”?

  • 《Windows Internals》10.1.6 HKEY_USERS:为什么它才是真正的“已加载用户配置大本营”?
  • 1. 先说结论:HKCU 是入口,HKU 才是仓库
  • 2. HKEY_USERS 到底是什么?它比名字看起来更重要
    • 2.1 loaded user profile
    • 2.2 user class registration database
  • 3. 为什么我说 HKU 才是真正的“已加载用户配置大本营”?
    • 3.1 它能看到“全部已加载用户”
    • 3.2 它直接按 SID 组织
    • 3.3 它能把“当前用户”和“非当前用户”放在同一张地图上
  • 4. HKU.DEFAULT 到底是什么?它不是“新用户默认模板”那么简单
    • 4.1 这句话意味着什么?
    • 4.2 那新用户初始配置从哪来?
  • 5. 用户配置到底存在哪?HKU、ProfileList、Ntuser.dat 三者怎么连起来?
  • 6. HKU 和 HKCU 到底是什么关系?一句话讲透
    • 6.1 HKU 是总表
    • 6.2 HKCU 是当前视图
  • 7. 服务账户为什么也会出现在 HKU 下面?这正说明 HKU 不是只给“普通用户”准备的
    • 7.1 这说明什么?
  • 8. 书里那个 Runas 实验为什么特别有价值?因为它能直接看到 HKU 的“动态变化”
    • 8.1 这个实验为什么重要?
    • 8.2 这对桌面支持有什么价值?
  • 9. 从桌面支持角度看,HKU 最有实战价值的 4 个场景
    • 9.1 同机不同用户,问题只影响某一个人
    • 9.2 分析“用户配置损坏”到底损坏在哪一层
    • 9.3 分析服务账户相关问题
    • 9.4 登录界面异常、背景异常
  • 10. 最容易搞混的 5 个点,我帮你一次理顺
    • 10.1 HKU 不是“系统里所有历史用户”
    • 10.2 HKU.DEFAULT 不是“未来所有用户默认配置”
    • 10.3 HKCU 不是独立于 HKU 的另一套数据
    • 10.4 用户配置不是只存在注册表里
    • 10.5 服务账户也属于“用户配置体系”
  • 11. 我的学习理解:HKU 真正让人建立的是“配置加载”视角,而不只是“路径记忆”
  • 12. 总结提升
    • 下一篇预告

《Windows Internals》10.1.6 HKEY_USERS:为什么它才是真正的“已加载用户配置大本营”?

学注册表的时候,很多人会先认识HKCU,因为它最贴近“当前用户”。
但如果继续往下学,我会发现一个更关键的事实:

真正承载“所有已加载用户配置”的地方,不是 HKCU,而是 HKEY_USERS(HKU)。

《Windows Internals》这一节写得非常直接:HKU 包含系统上每一个已加载用户配置文件(loaded user profile)以及用户类注册数据库的子键;它还包含一个特殊子键HKU\.DEFAULT,这个子键链接到system 的 profile,例如Winlogon就会使用它,所以改这里的桌面背景甚至会影响登录界面。书里还继续说明:系统的 profile 存储根位置默认由HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList\ProfilesDirectory定义,通常是%SystemDrive%\UsersProfileList会按SID记录系统已有 profile,并保存最后加载时间、SID 二进制值以及对应Ntuser.dat的磁盘路径。

所以这篇文章,我就专门把10.1.6 HKEY_USERS讲透:
为什么我说它不是“一个冷门根键”,而是 Windows 用户配置体系里真正的大本营。


1. 先说结论:HKCU 是入口,HKU 才是仓库

如果只用一句话总结这节内容,我会这样说:

HKCU 更像“当前用户快捷入口”,HKU 才是“所有已加载用户配置的总仓库”。

前一篇我已经讲过,HKCU 本质上是当前上下文下,映射到HKEY_USERS中当前 SID 那一支的逻辑入口。书里也明确说,当某个用户 profile 被加载时,HKCU 会被创建出来并映射到 HKEY_USERS 下该用户对应的键

这就意味着:

  • 想看“当前用户”配置,HKCU 很方便
  • 想看“系统里到底加载了哪些用户配置”,就得看 HKU
  • 想理解多用户、多服务账户、Winlogon、ProfileList、Ntuser.dat 的关系,也必须回到 HKU 这层

所以从学习路径上说:

注册表用户配置体系

HKCU 当前用户入口

HKU 已加载用户配置总仓

当前上下文视图

所有已加载 SID 分支

普通用户

服务账户

.DEFAULT / System Profile


2. HKEY_USERS 到底是什么?它比名字看起来更重要

《Windows Internals》原文对 HKU 的定义非常清楚:

HKU contains a subkey for each loaded user profile and user class registration database on the system.

翻成更容易理解的话就是:

只要某份用户配置已经被系统加载进来,HKU 下面就会出现对应的那一支。

这里有两个关键词特别重要:

2.1 loaded user profile

不是“系统里存在过的所有用户”,而是已经被加载的 profile
这个“加载”可能发生在:

  • 用户正常登录桌面
  • 某服务以特定用户名上下文运行
  • 使用Runas启动了一个当前未登录账户下的进程

这也是为什么 HKU 的内容不是一成不变的,而是会随着上下文动态变化。

2.2 user class registration database

这句话说明 HKU 下面不只是“用户偏好”,还和用户级类注册数据库有关。
这一点后面和Usrclass.datHKCU\Software\ClassesHKCR的关系会串起来。书里在 HKCR 那一节明确说过,用户级类注册数据来自HKCU\Software\Classes,它映射到磁盘上的Usrclass.dat

也就是说,HKU 不只是“桌面设置集合”,它实际上承载的是:

  • 用户 profile 注册表数据
  • 用户级类注册数据
  • 与用户上下文相关的系统行为配置

3. 为什么我说 HKU 才是真正的“已加载用户配置大本营”?

因为它具备三个 HKCU 不具备的视角。

3.1 它能看到“全部已加载用户”

HKCU 只能代表“当前这一个”。
但 HKU 能把系统当前已经加载进来的用户 profile 全部摊开来看。

这对理解多用户场景特别关键:

  • 本机同时登录多个用户
  • 某个账户未打开桌面,但被服务或 Runas 间接加载
  • 服务账户 profile 被加载进来
  • Winlogon 正在使用 system profile

这些在 HKCU 里看不全,但在 HKU 里能看到整体。


3.2 它直接按 SID 组织

书里明确说,ProfileList里的每个 profile 对应子键,都是按SID命名的;而 HKU 下每份用户配置,本质上也是以 SID 为核心标识。

这意味着 Windows 底层识别“谁是谁”,不是按用户名字符串,而是按 SID。
所以 HKU 更接近系统真实的用户配置组织方式。


3.3 它能把“当前用户”和“非当前用户”放在同一张地图上

这点很重要。

你平时看 HKCU,只能看到“我现在这个上下文”。
但一旦切到 HKU,你会看到:

  • 当前用户 SID
  • 其他已加载用户 SID
  • 服务账户 SID
  • .DEFAULT
  • 某些_Classes分支

也就是说,HKU 更像全局总览,HKCU 更像单点快捷方式。


4. HKU.DEFAULT 到底是什么?它不是“新用户默认模板”那么简单

这是很多人最容易误解的地方。

书里写得非常明确:

  • HKU 下面有一个叫.DEFAULT的子键
  • 它链接到system 的 profile
  • 这个 profile 会被running under the local system account的进程使用
  • Winlogon就会使用它,所以改这里的桌面背景会影响登录界面

4.1 这句话意味着什么?

它意味着HKU\.DEFAULT在这一节的语境里,重点不是“新建用户默认配置模板”,而是:

当前系统账户(Local System)正在使用的那份 profile 入口。

所以很多人以为:

  • .DEFAULT= “以后所有新用户都会继承这里”

这个理解至少在这节内容里并不准确。
书在这里强调的重点其实是:

  • 它和system profile有关
  • 它和Winlogon有关
  • 它会影响登录屏幕的表现。

4.2 那新用户初始配置从哪来?

书里也紧接着给了答案:

  • 当一个用户第一次登录系统
  • 且不依赖 roaming domain profile
  • 系统会基于%SystemDrive%\Users\Default存放的 profile 来创建她的 profile。

所以要分清两件事:

  • HKU\.DEFAULT:system profile / Winlogon 用的
  • %SystemDrive%\Users\Default:首次创建新用户配置时的基础模板来源。

这两个“Default”长得像,但语义完全不是一回事。


5. 用户配置到底存在哪?HKU、ProfileList、Ntuser.dat 三者怎么连起来?

这一段特别值得彻底吃透。

书里给出了非常完整的链路:

  • 系统默认把 profile 存在%SystemDrive%\Users

  • 这个根位置由HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList\ProfilesDirectory定义

  • ProfileList保存系统里已经存在的 profile 列表

  • 每个 profile 对应一个以SID命名的子键

  • 子键里会保存:

    • 最近一次加载时间LocalProfileLoadTimeLow
    • 账户 SID 的二进制值Sid
    • 磁盘上的 profile 路径ProfileImagePath
    • 对应的 hive 文件,也就是Ntuser.dat的路径信息。

我把它整理成一张图:

渲染错误:Mermaid 渲染失败: Lexical error on line 4. Unrecognized text. ... D[\Users\ ]D --> E[Ntuser.dat -----------------------^

这张图的核心含义就是:

磁盘上的用户配置文件、注册表里的 SID 分支、当前上下文下的 HKCU,其实是同一条链路上的不同层。


6. HKU 和 HKCU 到底是什么关系?一句话讲透

前面几篇已经讲了不少,这里我再用最直接的方式概括一次:

6.1 HKU 是总表

它存放:

  • 所有已加载用户 profile
  • 服务账户 profile
  • .DEFAULT
  • 用户级类注册相关分支

6.2 HKCU 是当前视图

它只是:

  • 当前上下文下
  • 指向 HKU 中“当前 SID 那一支”的快捷入口。

所以可以这么理解:

维度HKCUHKU
视角当前用户所有已加载用户
用途快速访问当前用户配置观察全局用户配置加载情况
组织方式当前上下文映射按 SID 分支组织
是否能看全局不能可以

这也是为什么我会说:

HKCU 是“当前用户窗口”,HKU 是“后台总机房”。


7. 服务账户为什么也会出现在 HKU 下面?这正说明 HKU 不是只给“普通用户”准备的

这一点特别能说明 HKU 的“系统级价值”。

在服务这一部分,书里提到:

  • Network Service账户的 profile 会加载到HKU\S-1-5-20
  • 它对应的文件和目录位于%SystemRoot%\ServiceProfiles\NetworkService
  • Local Service账户的 profile 会加载到HKU\S-1-5-19
  • 它对应的文件和目录位于%SystemRoot%\ServiceProfiles\LocalService

7.1 这说明什么?

说明 HKU 不只是“桌面用户配置集合”,它其实是:

所有已被系统加载的用户/服务身份配置的大集合。

换句话说:

  • 普通用户有自己的 HKU
  • 服务账户也有自己的 HKU
  • Local System 还会通过.DEFAULT这类入口参与其中

这一下就把 HKU 的定位拉高了:

它不是某个普通用户能不能看到壁纸那么简单,而是 Windows 身份上下文和配置加载机制的一部分。


8. 书里那个 Runas 实验为什么特别有价值?因为它能直接看到 HKU 的“动态变化”

《Windows Internals》给了一个非常经典的实验:

  • Runas启动一个当前没有登录到机器上的账户下的进程
  • 进程运行时打开 Regedit
  • 观察HKEY_USERS下加载出来的新 profile key
  • 结束该进程后,在 Regedit 里按F5刷新,这个 profile key 应该就不再存在了。

8.1 这个实验为什么重要?

因为它能一眼证明:

  • HKU 下面的内容不是静态死数据
  • 某个 profile 是否存在于 HKU,取决于它当前是否被加载
  • 用户没真正登录桌面,也可能因为某个进程上下文而触发 profile 加载。

8.2 这对桌面支持有什么价值?

非常大。

它能帮助我更准确地理解这类问题:

  • 某服务为什么会读到一个“没登录用户”的配置
  • 某程序用Runas后为什么行为变化了
  • 某个 HKU 分支为什么一会儿有、一会儿没
  • 为什么“当前没人在桌面登录”,系统里仍然会出现某些用户 profile 分支

这就是系统机制视角表面现象视角的区别。


9. 从桌面支持角度看,HKU 最有实战价值的 4 个场景

这一部分最贴近工作。

9.1 同机不同用户,问题只影响某一个人

比如:

  • 某用户 Outlook 异常,另一个用户正常
  • 某用户打印机连接丢失,别人没问题
  • 某用户登录后桌面异常,换个账号就好

这类问题只看 HKCU 很容易局限在当前人;
切到 HKU,我就能更直接对照不同 SID 的配置差异。


9.2 分析“用户配置损坏”到底损坏在哪一层

如果:

  • 新用户正常
  • 旧用户持续异常
  • 某个用户软件偏好怎么都不对

那就要联想到这条链:

  • ProfileList
  • ProfileImagePath
  • Ntuser.dat
  • HKU\<SID>
  • 当前上下文下的HKCU

这比一上来“重装系统”要专业得多。


9.3 分析服务账户相关问题

很多人排障时只盯普通用户账户,但实际上:

  • Network Service
  • Local Service
  • Local System

也都和 profile、注册表分支有关。
书里已经明确指出 Local Service 和 Network Service 的 profile 会分别加载到 HKU 对应 SID 下。

所以某些服务行为异常,根因未必在 HKLM,也可能在它自己的 HKU 分支。


9.4 登录界面异常、背景异常

这一类问题很容易被忽略。
因为书里专门提到Winlogon 使用的是 HKU.DEFAULT 对应的 system profile,所以这里的桌面背景设置会反映到登录屏幕。

也就是说:

登录界面问题,不一定是“桌面用户的 HKCU”问题,也可能是 HKU.DEFAULT 这层问题。


10. 最容易搞混的 5 个点,我帮你一次理顺

10.1 HKU 不是“系统里所有历史用户”

更准确地说,它是系统里当前已加载的用户 profile 集合

10.2 HKU.DEFAULT 不是“未来所有用户默认配置”

在本节语境里,它重点指向system profile / Winlogon 使用的 profile

10.3 HKCU 不是独立于 HKU 的另一套数据

HKCU 本质上是当前上下文下,映射到 HKU 中当前 SID 那一支的快捷入口。

10.4 用户配置不是只存在注册表里

它既有:

  • 注册表层面的HKU\<SID>
  • 也有磁盘层面的Ntuser.dat
  • 再加上ProfileList中的元信息。

10.5 服务账户也属于“用户配置体系”

不要只盯普通登录用户。
服务账户的 profile 同样会被加载到 HKU 下。


11. 我的学习理解:HKU 真正让人建立的是“配置加载”视角,而不只是“路径记忆”

我觉得 10.1.6 这一节真正厉害的地方,不在于它告诉我 HKU 下面有哪些分支,而在于它让我从“背路径”升级到了“理解加载机制”。

以前我可能只会记:

  • HKCU 是当前用户
  • HKLM 是本机
  • HKU 好像不太常用

但学到这里之后,我会意识到:

如果我要理解 Windows 是怎么把不同身份的配置装进系统里的,HKU 才是最关键的观察窗口。

因为它能把这些东西放到同一个框架里:

  • 当前登录用户
  • 其他已加载用户
  • 服务账户
  • system profile
  • SID
  • Ntuser.dat
  • ProfileList
  • Runas 触发的动态加载。

这套视角一建立,后面你再看:

  • 用户配置损坏
  • 临时配置文件
  • 服务账户行为差异
  • per-user 类注册
  • UAC 虚拟化与用户视图

就会明显顺很多。


12. 总结提升

如果让我用一句话总结10.1.6 HKEY_USERS,我会这样说:

HKEY_USERS 不是一个可有可无的冷门根键,而是 Windows 把所有“当前已加载的用户身份配置”统一组织起来的核心入口;HKCU 只是从这里切出当前上下文那一份给你看。

这篇最值得记住的 7 个结论是:

  1. HKU 包含系统上每一个已加载用户 profile 和用户类注册数据库的子键。
  2. HKU.DEFAULT 链接到 system profile,Winlogon 会使用它。
  3. 新用户首次登录时,profile 会基于%SystemDrive%\Users\Default创建。
  4. ProfileList 默认位于HKLM\...\ProfileList,并按 SID 记录已有 profile。
  5. 每个 profile 的信息包括最后加载时间、SID 二进制值、以及Ntuser.dat的路径。
  6. Runas 实验能直接看到 HKU 中 profile 的加载与卸载。
  7. 服务账户 profile 也会加载进 HKU,例如 Local Service 和 Network Service。

学完这一节后,后面你再继续看:

  • 10.1.7 HKEY_CLASSES_ROOT
  • Usrclass.dat
  • HKCU\Software\Classes
  • 服务账户 profile
  • ProfileList 与临时配置文件问题

会更顺,因为你已经把“用户配置总仓库”这层看明白了。


下一篇预告

《Windows Internals》10.1.7 HKEY_CLASSES_ROOT:为什么它看起来像文件关联根目录,其实本质是用户级与系统级 Classes 的合并视图?

这一篇会和:

  • 文件关联
  • COM 注册
  • HKCU\Software\Classes
  • HKLM\Software\Classes
  • Usrclass.dat

全部串起来,实战价值很高。

返回顶部

http://www.cnnetsun.cn/news/1601310.html

相关文章:

  • Galaxy UI组件库深度解析:3000+开源UI元素的完整实践手册
  • 企业级流程引擎与可视化表单深度集成:3步实现业务流程数字化
  • Libre Barcode开源字体:终极免费条码生成解决方案
  • 突破系统定制瓶颈:OpCore Simplify重构开源硬件适配技术路径
  • 动态透视报表 + 查询接口 + Excel导出
  • FireRed-OCR Studio应用场景:高校教务材料批量数字化处理方案
  • 探秘书匠策AI:毕业论文创作的“全能助手”大揭秘
  • 微信小程序如何找“人工客服”
  • nanobot实战:超轻量AI助手在QQ聊天场景中的7大应用
  • Wan2.2-I2V-A14B开发环境搭建:VSCode远程连接与调试教程
  • Vue 3组件通信的‘后悔药’:defineProps与defineEmits的5个高级调试与重构技巧
  • PROJECT MOGFACE与Dify平台集成:快速构建无需编码的AI智能体应用
  • 实战指南:在Vitis 2024.1的lwIP库中集成KSZ9031以太网PHY驱动
  • SpringAI 1.0.0 避坑指南:从ChatClient配置到流式响应乱码,一次讲清楚
  • Qwen3-14B助力出海企业:本地化部署支持小语种翻译与文化适配生成
  • DeepSeek-R1模型1.5B到671B:如何根据应用场景选择合适规模?
  • 用Steam游戏《Turing Complete》手把手教你搭建8位加法器:从半加器到全加器的完整逻辑
  • 新手入门:用FOFA、360Quake、Shodan、ZoomEye这四大网络测绘工具,5分钟快速定位暴露在公网的资产
  • 千问3.5-2B开源可部署实践:镜像体积仅8.2GB,适合带宽受限环境分发
  • 消息保护开源工具:RevokeMsgPatcher 全方位解决方案
  • AD使用技巧之-BGA扇出方法
  • 告别虚拟机!Windows WSL2+GNU Radio玩转HackRF-One无线接收(避坑指南)
  • 从RRT到RRT*:深入解析‘重选父节点’与‘重连’如何让你的机器人路径更丝滑
  • 船舶水动力学与运动控制:从理论建模到工程实践的全栈技术指南
  • UE5蓝图实战:5分钟搞定物品高亮与拾取交互(含后期处理材质避坑指南)
  • RVC模型性能对比测试:不同GPU算力下的推理速度与成本
  • ai辅助开发新体验:让快马平台智能解析与生成你的comfyui工作流
  • 新手入门hnu计算机系统:用快马生成你的第一个简易shell
  • 终极指南:如何用Turbo Boost Switcher轻松掌控Mac性能与温度[特殊字符]
  • 解决403 Forbidden:SmallThinker-3B-Preview模型API访问权限配置教程