不能直接按原调用假定读取到被模拟用户的 HKCU。只有在调用线程确实处于用户模拟上下文,且要访问的是被模拟用户的用户根键时,才应把 RegOpenKeyExW 的根键选择改为 RegOpenCurrentUser 返回的句柄;普通切换登录用户,或只讨论 32/64 位注册表视图,不属于这个问题的同一条件。本题适用范围是Windows桌面服务或应用实际模拟用户后的注册表读取;没有实际模拟时,不把本题当普通登录失败的解释。

这里的关键观察对象是发起注册表调用的线程,而不是进程启动账号的名称。应核调用线程的令牌是否确属预期主体。HKEY_CURRENT_USER有进程级缓存含义,不因另一用户配置加载就自动变更。官方对 RegOpenKeyExW 的说明指出,服务或应用模拟不同用户时,不要用该函数配 HKEY_CURRENT_USER,而应调用 RegOpenCurrentUser。因此,看到代码里有 HKEY_CURRENT_USER 并不能证明它会随模拟令牌自动跳到另一用户。
实际处理时,先在目标线程确认模拟是否有效,再调用 RegOpenCurrentUser 取得该上下文的用户根键,把返回句柄作为后续 RegOpenKeyExW 等调用的根,并在用完后用 RegCloseKey 释放。判断分支可以这样落地:若没有实际模拟,按当前线程的真实用户上下文处理,但仍要核实调用线程;若确有模拟,不要继续把 HKEY_CURRENT_USER 当作被模拟用户根键;若模拟未生效或发生在别的线程,应先修正上下文观察点,而不是换账号登录或扩大权限来试。
风险在于,原调用可能读到调用者自己的用户配置,或在访问被模拟用户配置时遇到权限、用户配置单元是否加载等问题;不能据此推导管理员账号就能自动读取所有用户配置。RegOpenCurrentUser使用线程令牌访问相应键;官方同时说明,用户配置未加载时可能使用默认键,不能仅凭取得句柄就确认读到了预期的完整配置。
下一步先在获准测试环境记录去敏主体类型、线程边界、实际根键、调用顺序与错误码,核对模拟是否在真正执行注册表读取的线程生效。不要通过换账号、扩大权限或修改他人配置来试错。
玄武区台式电脑用户可拨400-877-9605,先整理线程主体类型、实际根键、配置是否加载及调用顺序。电脑快修网提供信息展示与第三方维修对接,具体地址、电脑侧检查是否支持及安排需当次核实,启用范围不代表即时履约。